多线程环境中有一个变量(例如 int temp;)。一些线程写入它,写锁保护。而其他人读取变量,但没有任何锁。
我的问题是:如果变量被一些线程反复写入 SET 中的元素之一(例如 {1, 2, 3})。当我读到它时,它总是其中一个吗?
多线程环境中有一个变量(例如 int temp;)。一些线程写入它,写锁保护。而其他人读取变量,但没有任何锁。
我的问题是:如果变量被一些线程反复写入 SET 中的元素之一(例如 {1, 2, 3})。当我读到它时,它总是其中一个吗?
规则很简单:如果两个或多个线程访问同一个变量,并且其中至少一个线程写入它,则必须同步所有这些访问。如果不这样做,则行为未定义。
volatile
在这里帮不上忙;要么使用互斥锁或条件变量,要么使变量本身原子化。(并且“原子”是指 C++11 原子,而不是一些有人认为在多线程应用程序中表现良好的属性选择)。
如果没有人从您的 SET 之外写入值,则该值将保留在该 SET 中。您可能需要volatile
在您的情况下使用。
是的,如果你的变量的类型是不可变的,因为 SET 不允许重复
参考SET