32得票2回答
C++11中的Volatile

在C++11标准中,机器模型从单线程机器变成了多线程机器。 这是否意味着,在C++11中,典型的静态int x; void func() { x = 0; while (x == 0) {} }优化读取被优化掉的例子将不再发生? 编辑:对于那些不知道这个例子(我真的很惊讶)的人,请阅读这个...

15得票2回答
易失性引用指向可变对象 - 对象字段的更新是否对所有线程可见?

...不需要额外的同步?下面的 Tree 类被设计成可以被多个线程访问(它是一个单例,但没有通过枚举实现)class Tree { private volatile Node root; Tree() { root = new Node(); ...

26得票6回答
Interlocked.CompareExchange使用内存屏障吗?

我正在阅读Joe Duffy关于Volatile reads and writes, and timeliness的帖子,并试图理解帖子中最后一个代码示例的某些内容:while (Interlocked.CompareExchange(ref m_state, 1, 0) != 0) ; m_...

9得票2回答
Clojure中的同步计数器

如果我想保持一个全局计数器(例如,跨多个线程计算传入请求的数量),那么在Java中最好的方法是使用volatile int。假设正在使用Clojure,有更好的(吞吐量更高)方法吗?

10得票5回答
一个EventWaitHandle是否具有任何隐式的MemoryBarrier?

我是新来的,如果我没有按照规定的方式发布,请告诉我。 我经常编写类似下面示例的代码(为了清晰起见,省略了Dispose之类的内容)。我的问题是,是否需要像所示那样使用volatile关键字?或者ManualResetEvent.Set是否具有与Thread.Start相同的隐式内存屏障?还是...

8得票4回答
易变的 + 不可变的容器对象 = 线程安全?

我有一本书《Java Concurrency Pratique》中的示例,它说使用volatile和immutable holder对象可以实现线程安全。但我不理解书中给出的示例。 代码如下: public class VolatileCachedFactorizer extends Ge...

805得票25回答
volatile关键字有什么用处?

今天在工作中,我遇到了Java中的volatile关键字。由于不是很熟悉它,我找到了这篇说明文章。 鉴于该文章详细解释了关键字的相关内容,您是否曾经使用过它,或者是否可以想象出可以正确使用该关键字的情况?

8得票4回答
使用“指向易失变量的指针”是否始终防止编译器优化?

这里的问题是:您的程序暂时使用了一些敏感数据,并希望在不再需要时将其擦除。仅对自身使用std :: fill()并不能总是起到作用 - 编译器可能会认为内存块以后不会被访问,因此擦除代码是浪费时间,从而消除擦除代码。 用户ybungalobill建议{{link3:使用volatile关键字...

29得票5回答
在某些表达式中,JIT能否将两个volatile读取合并为一个?

假设我们有一个volatile int a。一个线程执行:while (true) { a = 1; a = 0; } 另一个线程同时在执行while (true) { System.out.println(a+a); } 现在,如果JIT编译器发出与a+a相应的汇编指...

368得票12回答
在C#中应该在什么时候使用volatile关键字?

有人能给出一个关于C#中volatile关键字的好解释吗?它解决了哪些问题,又没有解决哪些问题?在哪些情况下使用它可以避免使用锁定?