2013-03-27 95 views
2

在多线程环境中有一个变量(例如int temp;)。 一些线程写入它,写锁受保护。而其他人则读取变量,但没有任何锁定。在多线程环境中读取变量总是有效吗?

我的问题是: 如果这个变量被某些线程重复地写成SET(例如{1,2,3}), 中的一个元素。 当我读它时,它总是其中之一。

+1

您可能会发现这有助于:http://stackoverflow.com/questions/54188/are-c-reads-and-writes-of-an-int-atomic – hmjd 2013-03-27 10:42:22

+0

是的,Skizz的答案可以帮助我。 – 2013-03-27 11:19:40

回答

0

是的,它会,如果你的变量的类型是不可改变的,因为SET不允许重复

参考SET

+0

嗯,看来你误解了我的话。我的SET在这里意味着一组值,例如{1,2,3}。 – 2013-03-27 09:30:34

+0

你已经提供了一个链接到javadoc,即使这是一个C++的问题? – trojanfoe 2013-03-27 10:42:22

0

如果从集以外没有人写值,该值将保持从这组。你可能需要在你的情况下使用volatile

4

规则非常简单:如果两个或多个线程访问相同的变量,这些线程中的至少一个写它,你必须同步所有这些访问的。如果你不这样做,行为是不确定的。

volatile在这里没有帮助;要么使用互斥量,要么使用条件变量,或者使变量本身成为原子。 (而“原子”意味着C++ 11原子,而不是某些人认为在多线程应用程序中表现得相当好的属性选择)。

+0

我同意你的意见。我在这里提出这个问题是因为我看过很多代码,假设我的问题的答案是'是',这让我非常困惑。但它通常可能是'是',:) .. – 2013-03-27 11:33:27