我正在阅读关于volatile关键字的内容,并想知道下面这种情况会如何工作。
Class SomeClass
{
volatile int i = 10;
}
两个线程尝试修改变量i。
Thread 1 does i = i + 1;
Thread 2 does i = i - 1;
操作步骤如下:
线程1将变量i读入CPU寄存器中。 此时进行线程切换。 线程2读取变量i并将其减1,因此现在i的值为9; 然后重新调度线程1,那么线程1会从寄存器中获取i的值(即10)并将其递增到11,然后写回i;还是它将从原始源中读取i值为9并将其递增到10?
谢谢
volatile
的内容时,我建议你阅读Eric Lippert关于此的解释。简短的结论是:不要使用它。 - ken2k