码迷,mamicode.com
首页 > 编程语言 > 详细

多线程 之锁

时间:2021-06-30 18:15:34      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:unsafe   oid   pre   readonly   rgba   lock   设置   void   new   

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;
    }
  }
}

 

多线程 之锁

标签:unsafe   oid   pre   readonly   rgba   lock   设置   void   new   

原文地址:https://www.cnblogs.com/haigui-zx/p/14952890.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!