C++11 如果两个原子同时执行,会发生什么?

C++11 如果两个原子同时执行,会发生什么?,c++11,concurrency,atomic,memory-model,memory-barriers,C++11,Concurrency,Atomic,Memory Model,Memory Barriers,据我所知,cpp11中原子类型的原子操作保证为aomtic。但是,假设在多核系统中,如果两个线程同时执行以下操作,结果是否为1?假设初始原子val=0;看起来结果肯定是2,但为什么 val.fetch_add1,std::内存_order_released 作为补充,假设另一种情况,如果thread1执行val.load2;thread2 do val.load3,结果似乎是2还是3,但不确定是哪一个。即使1000个线程同时执行fetch_add,结果仍然是1000。这就是原子操作的全部要点:它

据我所知,cpp11中原子类型的原子操作保证为aomtic。但是,假设在多核系统中,如果两个线程同时执行以下操作,结果是否为1?假设初始原子val=0;看起来结果肯定是2,但为什么

val.fetch_add1,std::内存_order_released


作为补充,假设另一种情况,如果thread1执行val.load2;thread2 do val.load3,结果似乎是2还是3,但不确定是哪一个。

即使1000个线程同时执行fetch_add,结果仍然是1000。这就是原子操作的全部要点:它们是同步的

如果我们不得不担心任何原子操作对其他线程不同步/不可见,那么我们就不会有原子操作了


当执行诸如fetch_add之类的原子操作时,可以保证在任何给定时间只有一个原子操作开始和结束,并且不能被其他线程中启动的其他原子操作重叠/中断。

我知道原子操作没有中间状态。它们要么完成,要么未完成。但我对两个原子同时运行会发生什么感到困惑。你的意思是说原子运动不会同时发生吗?它们不可能同时发生。一个线程将等待另一个线程中的fetch_add完成。原子性=同步+可见性+内存顺序执行。谢谢,所以即使在多cpu系统中,原子操作之间也必须有一个发生序列,但不指定先发生哪一个?对不起,我不理解你的问题。你说原子性=同步+可见性+内存顺序执行。但据我所知,放松的秩序并不保证与关系同步