请忍受我的新手问题 我试图使用ghostscript将PDF转换为PNG,使用ASP.NET和C#。 不过,我也读过ghostscript不是线程安全的。 所以我的问题是: “ghostscript不是线程安全的”究竟意味着什么? 如果我在一个活着的ASP.NET(aspx)Web应用程序中使用它,并且同时有许多用户同时访问它,会产生什么影响? 我也从另一个网站上读到ghostscript ver的主要特性。 8.63是multithreading渲染。 这是否意味着我们的线程安全问题现已解决? ghostscript现在线程安全吗? 我也从PDFTron评估PDF2Image,这应该是线程安全的。 但是,每个CPU许可证并不便宜。 是否值得为“线程安全”和“不安全”付出额外的钱?
我正在寻找改善一个包,我相信当它的input是多个工作线程之间共享时,不要线程安全。 根据TDD原则,我应该写一些首先失败的testing,这对于评估问题肯定是有用的。 我意识到这不是一件简单的事情,并且天真地说,multithreadingtesting将是不确定的,因为操作系统将确定调度和各种操作交错的确切顺序。 我曾经看过并使用过MultithreadedTC ,这很有用。 但是,在这种情况下,我事先知道现有的实施scheme在哪里倒下了,从而能够做出一套很好的testing。 但是,如果你不是在确切地知道问题所在,那么是否有一个很好的方法来编写一个testing,这个testing很有可能会抛出任何潜在的问题? 有没有其他人find有用的图书馆? 我认为从纯粹的angular度来看,我认为multithreadingtesting用例应该和通常的单线程testing相同的调用和断言,只适用于多个工作线程? 任何关于工具/最佳实践/哲学的提议都是受欢迎的。
在“C#4简介”中,作者表示这个类有时可以写0,没有MemoryBarrier ,虽然我不能在我的Core2Duo中重现: public class Foo { int _answer; bool _complete; public void A() { _answer = 123; //Thread.MemoryBarrier(); // Barrier 1 _complete = true; //Thread.MemoryBarrier(); // Barrier 2 } public void B() { //Thread.MemoryBarrier(); // Barrier 3 if (_complete) { //Thread.MemoryBarrier(); // Barrier 4 Console.WriteLine(_answer); } } } private static void ThreadInverteOrdemComandos() { Foo obj […]
Java中的volatile int是线程安全的吗? 也就是说,它可以安全地读取和写入,而不locking?
只是检查… _count被安全地访问,对吧? 这两种方法都由多个线程访问。 private int _count; public void CheckForWork() { if (_count >= MAXIMUM) return; Interlocked.Increment(ref _count); Task t = Task.Run(() => Work()); t.ContinueWith(CompletedWorkHandler); } public void CompletedWorkHandler(Task completedTask) { Interlocked.Decrement(ref _count); // Handle errors, etc… }
很简单, javax.crypto.Cipher (例如Cipher.getInstance("RSA") )的一个实例可以从多个线程中使用,还是我需要将它们中的多个保存在ThreadLocal (在我的情况下)?
PHP(从5.2开始)在Linux / UNIX上是线程安全的吗? 是否有可能与Apache Worker-MPM或Event-MPM一起使用? 我到目前为止收集的事实是不确定的: 包含在大多数发行版中的默认二进制文件都禁用了ZTS,所以我知道,我必须重新编译它们。 理论上讲,启用了ZTS的Zend Engine(核心PHP)是线程安全的。 据说有些模块可能不是线程安全的,但是我还没有find任何模块的列表。 PHP常见问题解答状态几乎与上面相同。 你有什么经验? 这不仅是关于分段错误 (Windows命名中的“访问违规”)。 线程安全还有很多。
我有一个multithreading程序,我创build一个生成器函数,然后将其传递给新的线程。 我希望它是共享/全局性的,所以每个线程可以从生成器中获得下一个值。 使用这样的生成器是否安全,还是会遇到从多个线程访问共享生成器的问题/条件? 如果没有,是否有更好的方法来处理这个问题? 我需要的东西,将循环通过一个列表,并产生任何线程调用它的下一个值。
假设我有一个非易失性的int字段和一个Interlocked.Increment它的线程。 另一个线程是否可以直接安全地读取它,或者读取是否需要互锁? 我以前认为我必须使用一个互锁的读取来保证我看到当前的值,毕竟这个字段是不稳定的。 我一直在使用Interlocked.CompareExchange(int, 0, 0)来实现。 然而,我已经偶然发现了这个答案 ,这表明实际上,普通读取总是会看到Interlocked.Increment ed值的当前版本,由于int读取已经是primefaces的,所以不需要做任何特殊的事情。 我还发现了一个请求,微软拒绝了Interlocked.Read(ref int)的请求 ,并进一步暗示这是完全多余的。 那么我能否真正安全地读取这种没有Interlocked的int域的最新值?
在C#中获得线程安全计数器的最佳方式是什么? 这是如此简单: public static long GetNextValue() { long result; lock (LOCK) { result = COUNTER++; } return result; } 但有更快的select吗?