gpt4 book ai didi

c++11 - 如果两个原子的 fetch_add 同时执行会发生什么?

转载 作者:行者123 更新时间:2023-12-02 20:20:18 24 4
gpt4 key购买 nike

据我所知,cpp11中原子类型的原子操作保证是aomtic。但是,假设在多核系统中,如果两个线程同时进行以下操作,结果会是1吗?(假设最初是atomic<int> val=0;)看起来结果肯定是2,但为什么呢?

val.fetch_add(1,std::memory_order_relaxed);

作为补充,假设另一种情况,如果 thread1 执行 val.load(2); thread2 做 val.load(3) ,看起来结果是2还是3,但也不确定是哪一个。

最佳答案

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

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

执行原子操作(如fetch_add)时,可以保证在任何给定时间只有一个原子操作开始和完成,并且它不能被重叠/中断其他原子操作在其他线程中启动。

关于c++11 - 如果两个原子的 fetch_add 同时执行会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51580505/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com