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

线程安全计数器:是否还需添加volatile修饰符?

关于_counter的volatile修饰符与Interlocked.Increment的线程安全性分析

1. 要不要给_counter加volatile修饰符?

完全没必要。你对_counter的所有操作都只靠Interlocked.Increment完成,Interlocked系列方法本身自带完整的内存屏障,既保证了操作的原子性,也能让其他线程立刻看到更新后的结果。volatile本来是用来保证单个字段读写可见性的,但你这里根本没有直接读写_counter的代码,所有访问都被Interlocked方法包着,加volatile纯属多余。

2. 只用Interlocked.Increment够不够保证线程安全?

足够。Interlocked.Increment(ref _counter)是原子操作,多线程同时操作时,不会出现计数丢更的情况,最终的结果肯定是正确的。你在ShouldPlaceOrder里只用到这个原子操作的返回值做判断,整个逻辑不存在竞态条件,完全线程安全,不需要额外加锁或者其他同步手段。

额外提一句:要是之后你改代码,出现了直接读取_counter的逻辑(比如if (_counter > 100)),那时候才需要考虑用volatile或者Interlocked.Read来保证可见性,但就现在的代码来说,完全不用瞎折腾。


内容的提问来源于stack exchange,提问作者nop

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:54:06