gpt4 book ai didi

java - 在 C++ 中是否有 Java 'volatile' 的等价物?

转载 作者:可可西里 更新时间:2023-11-01 09:19:59 29 4
gpt4 key购买 nike

在 Java 中,有时当从不同线程访问同一个变量时,每个线程都会创建自己的变量拷贝,因此如果我将一个线程中的变量值设置为 10 并且然后我尝试从另一个线程读取这个变量的值,我不会得到 10(因为第二个线程正在从变量的另一个拷贝读取!)。

要在 Java 中解决这个问题,我所要做的就是使用关键字 volatile,例如:

volatile int i = 123;

这个问题在C++中是否也存在?如果是这样,我该如何解决?

注意:我使用的是 Visual C++ 2010。

最佳答案

是的,同样的问题存在于C++中。但是由于 C 已经引入了关键字 volatile具有不同的含义(与线程无关),并且 C++ 以相同的方式使用它们关键字,您不能使用 volatile在 C++ 中就像在 Java 中一样。

相反,您最好使用 std::atomic<T> (或提升::)。它并不总是最有效的选择,但它很简单。如果这是一个瓶颈,你可以放松 std::memory_orderstd::atomic 使用.

话虽如此,关于标准 C++,MSVC++ 作为扩展确实保证了多个线程可以访问共享的 volatile多变的。 IIRC,所有线程最终都会看到相同的值,并且没有线程会及时返回。 (也就是说,如果 0 和 1 按顺序写入变量,则没有线程会看到序列 1,0)

关于java - 在 C++ 中是否有 Java 'volatile' 的等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30892891/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com