2

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

我的问题是:如果变量被一些线程反复写入 SET 中的元素之一(例如 {1, 2, 3})。当我读到它时,它总是其中一个吗?

4

3 回答 3

4

规则很简单:如果两个或多个线程访问同一个变量,并且其中至少一个线程写入它,则必须同步所有这些访问。如果不这样做,则行为未定义。

volatile在这里帮不上忙;要么使用互斥锁或条件变量,要么使变量本身原子化。(并且“原子”是指 C++11 原子,而不是一些有人认为在多线程应用程序中表现良好的属性选择)。

于 2013-03-27T11:22:06.863 回答
0

如果没有人从您的 SET 之外写入值,则该值将保留在该 SET 中。您可能需要volatile在您的情况下使用。

于 2013-03-27T10:46:33.007 回答
0

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

参考SET

于 2013-03-27T09:26:27.153 回答