c++ - 一个关于原子操作的问题及其 c++ 说明
问题描述
我有一个关于原子操作的问题,以及它在 C++ 中的阐述:
std::atomic<int> my_value{0};
//...
// executed on thread 1
int a = my_value++;
//...
//executed on thread 2
int b= my_value++;
对我来说, std::atomic::operator++ 确保 my_value == 2 ,但它是否也确保 {a=0, b=1} 或 {a=1, b=0} ?
据我了解,只有增量操作是原子的,我以某种方式将此代码视为:
std::atomic<int> my_value{0};
//...
// executed on thread 1
int a = m_value;
my_value++;
//...
//executed on thread 2
int b= my_value;
my_value++;
然而,我看到一些实现似乎假设做作和增量都是原子的......为什么,以及如何?
在此先感谢您的时间 !
解决方案
据我了解,只有增量操作是原子的......
那是错误的。读取实际值和(后)增量都是单个原子操作。它与 相同fetch_add(1);
。注意操作名称中的“fetch”。
推荐阅读
- excel - 如何使用电子表格中前一行条目的条件格式突出显示更改?
- javascript - 在一个函数中多次使用相同的方法
- python - BeautifulSoup:
- Elements Won't Show on Children List. Parser problem?
- html - 自定义 Google 搜索(不是 Google 自定义搜索)
- swift - 发送本地通知
- .net-core - Angular 2+ 和 dotnet core 2.1 - 手动设置身份验证
- linux - 如何用 X 到 Y 字符替换字符串
- mongodb - 在 Mongo 上更新集合
- swift - Swift:如何将单元格发送到 TableView 中的正确部分?
- java - 将 UTC 中的 ISO 8601 字符串转换为本地时间 - JodaTime 正在添加与本地时区相反的时间