在multithreading环境中读取variables是否总是有效?

multithreading环境中有一个variables(例如int temp;)。 一些线程写入,写保护。 而其他人阅读variables,但没有任何locking。

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

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

volatile对此无济于事; 要么使用互斥量,要么使用条件变量,或者使变量本身为原子。 (而“原子”是指C ++ 11原子,而不是某些人认为在多线程应用程序中表现得相当好的属性的选择)。

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

请参阅SET

如果没有人从你的SET外面写入数值,那么这个数值将从这个SET中保留下来。 你可能需要在你的情况下使用volatile