相关文章推荐
谦和的西红柿  ·  绿雪芽日光萎凋寿眉-绿雪芽日光萎凋寿眉促销价 ...·  4 月前    · 
爱旅游的斑马  ·  ASP.NET Core 中的模型绑定 | ...·  11 月前    · 
好帅的砖头  ·  Java Attach原理与实践 | JRASP·  1 年前    · 
威武的香菇  ·  数据库获取当前时间 _oracle ...·  1 年前    · 
阳刚的饭卡  ·  主唱被刺杀?那也瓦解不了披头士乐队的辉煌·  2 年前    · 
Code  ›  如何原子地否定std::atomic_bool?开发者社区
https://cloud.tencent.com/developer/ask/sof/109381496
温暖的凉茶
2 年前
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
提问
问 如何原子地否定std::atomic_bool?
Stack Overflow用户
提问于 2012-03-21 14:04:26
EN

朴素布尔否定

std::atomic_bool b;
b = !b;

似乎不是原子的。我怀疑这是因为 operator! 触发了对普通 bool 的转换。一个人将如何原子地执行等价的否定?下面的代码说明天真的否定不是原子的:

#include <thread>
#include <vector>
#include <atomic>
#include <iostream>
typedef std::atomic_bool Bool;
void flipAHundredThousandTimes(Bool& foo) {
  for (size_t i = 0; i < 100000; ++i) {
    foo = !foo;
// Launch nThreads std::threads. Each thread calls flipAHundredThousandTimes 
// on the same boolean
void launchThreads(Bool& foo, size_t nThreads) {
  std::vector<std::thread> threads;
  for (size_t i = 0; i < nThreads; ++i) {
    threads.emplace_back(flipAHundredThousandTimes, std::ref(foo));
  for (auto& thread : threads) thread.join();
int main() {
  std::cout << std::boolalpha;
  Bool foo{true};
  // launch and join 10 threads, 20 times.
 
推荐文章
谦和的西红柿  ·  绿雪芽日光萎凋寿眉-绿雪芽日光萎凋寿眉促销价格、绿雪芽日光萎凋寿眉品牌 - 淘宝
4 月前
爱旅游的斑马  ·  ASP.NET Core 中的模型绑定 | Microsoft Learn
11 月前
好帅的砖头  ·  Java Attach原理与实践 | JRASP
1 年前
威武的香菇  ·  数据库获取当前时间 _oracle 无效的类型timestamp输入语法-CSDN博客
1 年前
阳刚的饭卡  ·  主唱被刺杀?那也瓦解不了披头士乐队的辉煌
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号