同时写入/读取基本数据类型

时间:2016-02-22 22:19:13

标签: c++ multithreading

在C ++中,假设我有一个 basic 数据类型的变量,如int counter,这是许多线程使用的。为了修改counter,线程必须首先获得一个简单的锁。但我希望这个值随时可读,无论它是否被锁定。

当一个线程读取counter而另一个线程正在修改它时,我是否有保证至少得到写入前或写入后的值,而不是某些损坏的值?

例如:

//counter == 10
counter += 5;
//counter == 15

这段时间内阅读counter的所有帖子都会保证至少阅读1015吗?而不是像-834289那样奇怪的值。

如果答案是特定于实现的,我正在使用Visual Studio 2015。

3 个答案:

答案 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