我正在阅读有关volatile关键字的信息,并想知道下面的场景如何锻炼.
Class SomeClass
{
volatile int i = 10;
}
Run Code Online (Sandbox Code Playgroud)
两个线程正在尝试修改变量i.
Thread 1 does i = i + 1;
Thread 2 does i = i - 1;
Run Code Online (Sandbox Code Playgroud)
操作顺序如下:
线程1将变量i读入CPU寄存器.此时发生线程切换.线程2读取变量i并将其递减1,因此现在i的值为9; 线程1再次被调度,现在线程1将采用i值格式寄存器(为10)并将其递增为11并将其写回i或将其从原始源读取并将i值读取为9并增加它到10?
谢谢
递增/递减操作不是原子操作,因此您描述的竞争条件完全可能.使用volatile并不妨碍它.您需要使用lock或者可能使用Interlocked.Increment,以确保操作都是原子操作.
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |