volatile关键字的用法

Sri*_*eti 3 c# volatile

我正在阅读有关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?

谢谢

Ser*_*rvy 8

递增/递减操作不是原子操作,因此您描述的竞争条件完全可能.使用volatile并不妨碍它.您需要使用lock或者可能使用Interlocked.Increment,以确保操作都是原子操作.