首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同时写入/读取基本数据类型

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

Stack Overflow用户
提问于 2016-02-22 22:19:12
回答 3查看 81关注 0票数 1

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

当一个线程在其他线程修改它时读取counter时,我是否保证至少获得预写或后写值,而不是一些损坏的值?

例如:

代码语言:javascript
复制
//counter == 10
counter += 5;
//counter == 15

这段时间所有读取counter的线程都能保证至少读取1015吗?而不是一些奇怪的值,比如-834289

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-22 22:21:54

Intel architectures上,字大小值的赋值通常是原子的,因此不会读取损坏的值。

票数 2
EN

Stack Overflow用户

发布于 2016-02-22 22:21:38

不不是的。使用std::atomic_int

票数 3
EN

Stack Overflow用户

发布于 2016-02-22 22:22:49

请看这里的相互关联的函数系列:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms686360(v=vs.85).aspx

你要找的最有可能是:

InterlockedAdd

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35565074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档