num+在“int num”中可以是原子的吗?
一般情况下,int num
, num++
(或++num
),作为读-修改-写入操作,是非原子..但是我经常看到编译器,例如GCC,为它生成以下代码(试试这里):
因为第5行对应于num++
是一条指令,我们能得出结论吗num++
是原子的在这种情况下?
如果是这样的话,这是否意味着num++
可以在并发(多线程)方案中使用,而不存在任何数据竞争的危险。(例如,我们不需要去做,std::atomic<int>
加上相关的成本,因为它是原子的)?
更新
注意这个问题是不是否增量是原子(它不是,也是这个问题的开场白)。关键是它是否能,会,可以在特定情况下,即是否可以在某些情况下利用单指令性质来避免lock
前缀。而且,正如公认的答案在关于单处理器计算机的一节中提到的,以及这个答案在评论和其他人的解释中,它可以(虽然没有使用C或C+)。