非常建议大家参考一下以上代码,我在对服务器进行访问时,也会常常参考这个模型。
简单的自旋锁
class SomeResource
{
private SimpleSpinLock s1 = new SimpleSpinLock();
public void AccessResource()
{
s1.Enter();
//一次是有一个线程才能进入访问
s1.Leave();
}
}
class SimpleSpinLock
{
private int _mResourceInUse;
public void Enter()
{
while (true)
{
if(Interlocked.Exchange(ref _mResourceInUse,1)==0)
return;
}
}
public void Leave()
{
Volatile.Write(ref _mResourceInUse,1);
}
}
这就是一个线程同步锁的简单实现,这种锁的最大问题在于,存在竞争的情况下会造成线程的“自旋”,这会浪费CPU的宝贵时间,组织CPU做更多的工作,因此,这种自旋锁应该用于保护那些执行的非常快的代码。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持ASPKU!
注:相关教程知识阅读请移步到c#教程频道。










