根据这篇文章, http: //msdn.microsoft.com/en-us/magazine/cc163715.aspx,这是自旋锁类的实现:
class SpinLock
{
volatile int isEntered;
// non-zero if the lock is entered
public void Enter()
{
while (Interlocked.CompareExchange(ref isEntered, 1, 0) != 0)
{
Thread.Sleep(0); // force a thread context switch
}
}
public void Exit()
{
isEntered = 0;
}
}
我知道 volatile 的含义和作用,但我不明白为什么它在这里。
我想在另一个主题中问的最后一件事-读取对象的属性是否算作原子操作?据我了解,这里有两个读取:首先是对象引用,其次是属性读取。