276得票3回答
std::atomic是什么意思?

我明白std::atomic<>是一个原子对象。但是原子到什么程度呢?据我理解,一个操作可以是原子的。那么,将一个对象设置为原子对象具体意味着什么呢?例如,如果有两个线程同时执行以下代码: a = a + 12; 那么整个操作(比如add_twelve_to(int))是原子...

137得票6回答
什么时候我真正需要使用atomic<bool>而不是bool?

atomic&lt;bool&gt;是不是多余的,因为bool本身就是原子性的?我认为部分修改布尔值是不可能的。什么时候我才真正需要使用atomic&lt;bool&gt;而不是bool呢?

105得票5回答
理解C++11中的std::atomic::compare_exchange_weak()函数

bool compare_exchange_weak (T&amp; expected, T val, ..); compare_exchange_weak() 是 C++11 中提供的比较交换原语之一。它在某种意义上是弱的,即使对象的值等于expected,它也会返回false。这是因为...

90得票5回答
C++中的std::atomic,什么是std::memory_order以及如何使用它们?

有人能用简单易懂的语言解释一下std::memory_order是什么,以及如何与std::atomic&lt;&gt;一起使用吗? 我在这里找到了参考资料和一些例子,但完全不理解。 http://en.cppreference.com/w/cpp/atomic/memory_order

88得票3回答
我必须明确调用原子加载/存储吗?

C++11引入了std::atomic&lt;&gt;模板库。标准规定了store()和load()操作,用于原子地设置/获取由多个线程共享的变量。 我的问题是赋值和访问操作是否也是原子的? 也就是说: std::atomic&lt;bool&gt; stop(false); ... v...

87得票3回答
std::atomic的锁在哪里?

如果一个数据结构内含多个元素,那么它的原子版本通常不能实现无锁操作。因为CPU在没有使用某种锁的情况下无法原子性地更改数据。例如:#include &lt;iostream&gt; #include &lt;atomic&gt; struct foo { double a; ...

81得票2回答
64得票9回答
为什么编译器不会合并冗余的std::atomic写操作?

我想知道为什么没有编译器准备将相同值的连续写入合并到单个原子变量中,例如:#include &lt;atomic&gt; std::atomic&lt;int&gt; y(0); void f() { auto order = std::memory_order_relaxed; y....

64得票4回答
memory_order_seq_cst和memory_order_acq_rel有何区别?

存储是对于两者都是释放操作,加载则是对于两者都是获取操作。我知道memory_order_seq_cst旨在为所有操作强制实施额外的全序,但我无法构建一个示例,在其中用memory_order_acq_rel替换所有memory_order_seq_cst而不是这种情况。 我错过了什么,还是...

62得票2回答
std::atomic<std::string>是否能够正常工作?

我正在阅读Anthony Williams的《C++ Concurrency in Action》一书,第五章讲述了新的多线程感知内存模型和原子操作,他指出: 为了使用std::atomic&lt;UDT&gt;来处理某些用户定义的UDT,这种类型必须具有一个平凡的复制赋值运算符。 据...