在C++中,假设我有一个基本数据类型的变量,如int counter,它被许多线程使用。为了修改counter,线程必须首先获得一个简单的锁。但是我希望这个值在任何时候都是可读的,不管它是否被锁定。
当一个线程在其他线程修改它时读取counter时,我是否保证至少获得预写或后写值,而不是一些损坏的值?
例如:
//counter == 10
counter += 5;
//counter == 15这段时间所有读取counter的线程都能保证至少读取10或15吗?而不是一些奇怪的值,比如-834289。
如果答案是特定于实现的,我将使用Visual 2015。
发布于 2016-02-22 22:21:54
在Intel architectures上,字大小值的赋值通常是原子的,因此不会读取损坏的值。
发布于 2016-02-22 22:21:38
不不是的。使用std::atomic_int
发布于 2016-02-22 22:22:49
请看这里的相互关联的函数系列:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms686360(v=vs.85).aspx
你要找的最有可能是:
InterlockedAdd
https://stackoverflow.com/questions/35565074
复制相似问题