您的位置:首页 > 博客中心 > 编程语言 >

多线程 之锁

时间:2022-03-29 01:43

1. 线程安全

排它锁用于确保同一时间只允许一个线程执行指定的代码段。主要的两个排它锁构造是lockMutex(互斥体)。其中lock更快,使用也更方便。而Mutex的优势是它可以跨进程的使用。

lock 排他锁

class ThreadUnsafe
{
  static int _val1 = 1, _val2 = 1;

  static void Go()
  {
    if (_val2 != 0) Console.WriteLine (_val1 / _val2);
    _val2 = 0;
  }
}

这个类不是线程安全的:如果Go方法同时被两个线程调用,可能会产生除数为零错误,因为可能在一个线程刚好执行完if的判断语句但还没执行Console.WriteLine语句时,_val2就被另一个线程设置为零。

下边使用lock解决这个问题:

class ThreadSafe
{
  static readonly object _locker = new object();
  static int _val1, _val2;

  static void Go()
  {
    lock (_locker)
    {
      if (_val2 != 0) Console.WriteLine (_val1 / _val2);
      _val2 = 0;
    }
  }
}

 

本类排行

今日推荐

热门手游