【发布时间】:2015-09-02 18:22:32
【问题描述】:
在Java中,有时当从不同线程访问同一个变量时,每个线程都会创建自己的变量副本,因此如果我将一个线程中的变量值设置为10然后我尝试读取这个变量的值来自另一个线程,我不会得到10(因为第二个线程正在从另一个变量的副本中读取!)。
要在Java中解决这个问题,我所要做的就是使用关键字volatile,例如:
volatile int i = 123;
这个问题在 C++ 中也存在吗?如果是这样,我该如何解决?
注意:我使用的是 Visual C++ 2010。
【问题讨论】:
-
最简单的方法是std::atomic。
-
std::atomic在 VC2010 中不可用。boost::atomic是一个选项。 -
请阅读
volatile是什么(在 Java 中)。看来您高估了它的功能。不,没有volatile,它不是“每个线程一个副本”。 -
@DJClayworth 也许这就是 OP 的想法,也许不是,这就是我首先写它的原因(他应该阅读更多关于它的内容)
-
好吧,threadcopy 问题似乎解决了,但仍然:阅读 Java 中的 volatile。它不是在任何情况下都可以确保线程安全的完美解决方案。而 C++ volatile 则更少。
标签: java c++ windows multithreading