繁体   English   中英

在C ++中是否存在Java'volatile'的等价物?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM