You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多线程执行a=0是否存在竞态条件?全局变量最终值能否非0?

问题

假设有5个线程执行以下代码:

barrier();
a = 0;

其中a是全局int类型变量。是否有可能在所有线程都执行完上述赋值代码后,a的值不为0?

回答

不可能,所有线程执行完赋值操作后,a的值一定是0。

核心原因有两点:

  • 线程屏障的同步保证:barrier()作为线程同步屏障,会让所有5个线程都阻塞在这个调用点,直到全部线程都到达此处,才会允许所有线程继续执行后续的a = 0。也就是说,所有线程的赋值操作都是在屏障放行后才开始的,不存在某线程还没到屏障就提前执行赋值的情况。
  • 赋值操作的结果确定性:不管线程们以什么顺序执行a = 0,每个操作都是把a设置为0。哪怕在某些架构上int的赋值不是原子操作(比如拆分多步写内存),每一步写的都是0,最终a的所有位都会被置0;如果是原子赋值,最后一个完成的写操作也会将a固定为0。

本质上所有线程都在写入同一个固定值0,无论执行顺序如何交错,最终结果必然是0。


内容的提问来源于stack exchange,提问作者Me- La Ría

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 21:25:24