多线程 之锁
时间:2021-06-30 18:15:34
收藏:0
阅读:0
1. 线程安全
排它锁用于确保同一时间只允许一个线程执行指定的代码段。主要的两个排它锁构造是lock
和Mutex
(互斥体)。其中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; } } }
评论(0)