C# 线程同步详解

2019-12-30 16:23:07刘景俊

非常建议大家参考一下以上代码,我在对服务器进行访问时,也会常常参考这个模型。

简单的自旋锁


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#教程频道。