在C ++中,假设我有一个 basic 数据类型的变量,如int counter
,这是许多线程使用的。为了修改counter
,线程必须首先获得一个简单的锁。但我希望这个值随时可读,无论它是否被锁定。
当一个线程读取counter
而另一个线程正在修改它时,我是否有保证至少得到写入前或写入后的值,而不是某些损坏的值?
例如:
//counter == 10
counter += 5;
//counter == 15
这段时间内阅读counter
的所有帖子都会保证至少阅读10
或15
吗?而不是像-834289
那样奇怪的值。
如果答案是特定于实现的,我正在使用Visual Studio 2015。
答案 0 :(得分:3)
不,不是。使用std::atomic_int
答案 1 :(得分:2)
在Intel architectures上,字大小值的赋值通常是原子的,因此您不会读取损坏的值。
答案 2 :(得分:1)
在这里查看互锁的函数系列:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms686360(v=vs.85).aspx
您正在寻找的那个最有可能:
InterlockedAdd