我明白这std::atomic<>是一个原子对象.但原子到什么程度?根据我的理解,操作可以是原子的.使对象成为原子意味着什么?例如,如果有两个线程同时执行以下代码:
a = a + 12;
Run Code Online (Sandbox Code Playgroud)
然后是整个操作(比方说add_twelve_to(int))原子?或者是变量原子(so operator=())的变化?
我不知道std::atomic变量,但是知道std::mutex标准提供的(奇怪的权利!); 然而有一件事引起了我的注意:标准提供了两种看似相同(对我而言)的原子类型,如下所示:
它也以 - 的例子提到std::atomic_flag type-
std :: atomic_flag是一种原子布尔类型.与std :: atomic的所有特化不同,它保证是无锁的.与std :: atomic不同,std :: atomic_flag不提供加载或存储操作.
我不明白.std::atomic bool type不保证是无锁的吗?那它不是原子的还是什么?
那么两者之间有什么区别呢?我应该在何时使用哪种?