在多线程环境中有一个变量(例如int temp;)。 一些线程写入它,写锁受保护。而其他人则读取变量,但没有任何锁定。在多线程环境中读取变量总是有效吗?
我的问题是: 如果这个变量被某些线程重复地写成SET(例如{1,2,3}), 中的一个元素。 当我读它时,它总是其中之一。
在多线程环境中有一个变量(例如int temp;)。 一些线程写入它,写锁受保护。而其他人则读取变量,但没有任何锁定。在多线程环境中读取变量总是有效吗?
我的问题是: 如果这个变量被某些线程重复地写成SET(例如{1,2,3}), 中的一个元素。 当我读它时,它总是其中之一。
如果从集以外没有人写值,该值将保持从这组。你可能需要在你的情况下使用volatile
。
规则非常简单:如果两个或多个线程访问相同的变量,这些线程中的至少一个写它,你必须同步所有这些访问的。如果你不这样做,行为是不确定的。
volatile
在这里没有帮助;要么使用互斥量,要么使用条件变量,或者使变量本身成为原子。 (而“原子”意味着C++ 11原子,而不是某些人认为在多线程应用程序中表现得相当好的属性选择)。
我同意你的意见。我在这里提出这个问题是因为我看过很多代码,假设我的问题的答案是'是',这让我非常困惑。但它通常可能是'是',:) .. – 2013-03-27 11:33:27
您可能会发现这有助于:http://stackoverflow.com/questions/54188/are-c-reads-and-writes-of-an-int-atomic – hmjd 2013-03-27 10:42:22
是的,Skizz的答案可以帮助我。 – 2013-03-27 11:19:40