首页 > TAG信息列表 > stdatomic
c-正式保证读取的内容在其他线程中不会看到写入(带有竞争条件)的方式是什么?
这是关于C标准的形式保证的问题. 当潜在存在竞争条件时,可以保证对共享变量(普通,非原子)的读取看不到写入,从而使两次读取看到两个“后续”(按照程序顺序和条件)写入并导致每次读取导致一次写入,并引起数据竞争: // Global state int x = 0, y = 0; // Thread 1: r1 = x; if (r1c – 使用4个线程获取/释放语义
我目前正在阅读Anthony Williams的C Concurrency in Action.他的一个列表显示了这段代码,他声明z!= 0的断言可以触发. #include <atomic> #include <thread> #include <assert.h> std::atomic<bool> x,y; std::atomic<int> z; void write_x() { x.store(true,std::memorc – 为什么编译器没有合并多余的std :: atomic写入?
我想知道为什么没有编译器准备将相同值的连续写入合并到单个原子变量,例如: #include <atomic> std::atomic<int> y(0); void f() { auto order = std::memory_order_relaxed; y.store(1, order); y.store(1, order); y.store(1, order); } 我尝试过的每个编译器都会发出