标签:unsafe oid pre readonly rgba lock 设置 void new
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; } } }
标签:unsafe oid pre readonly rgba lock 设置 void new
原文地址:https://www.cnblogs.com/haigui-zx/p/14952890.html