[英]Is there an equivalent of Java 'volatile' in C++?
在Java中,有时当从不同的线程访问同一个变量时,每个线程都会创建自己的变量副本,所以如果我将一个线程中的变量值设置为10
然后我试着读取这个变量的值从另一个线程,我不会得到10
(因为第二个线程是从变量的另一个副本读取!)。
要在Java中解决这个问题,我所要做的就是使用关键字volatile,例如:
volatile int i = 123;
这个问题在C ++中也存在吗? 如果是这样,我该如何解决?
注意:我使用的是Visual C ++ 2010。
是的,C ++中存在同样的问题。 但是由于C已经引入了具有不同含义的关键字volatile
(与线程无关),并且C ++以相同的方式使用了它们的关键字,所以你不能像在Java中那样在C ++中使用volatile
。
相反,你可能最好使用std::atomic<T>
(或boost::)。 它并不总是最有效的选择,但它很简单。 如果这原来是一个瓶颈,你可以放松std::memory_order
所使用std::atomic
。
说到标准C ++,MSVC ++作为扩展确保多个线程可以访问共享的volatile
变量。 IIRC,所有线程最终都会看到相同的值,并且没有线程会及时返回。 (也就是说,如果0和1按顺序写入变量,则没有线程会看到序列1,0)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.