C#Lock线程锁和Lock语句
C#中的Lock语句将Lock中的语句块视为临界区,让多线程访问临界区代码时,必须顺序访问,它的作用是在多线程环境下,确保临界区中的对象只被一个线程操作,防止出现对象被多次改变的情况。lock属于互斥锁,在编译时此语句通过System.Threading.Monitor.Enter
和System.Threading.Monitor.Exit
实现线程锁。
注意的地方是,lock参数对象必须是一个不可变对象,否则无法阻止另一个线程进入临界区,常见的传入参数多用private static readonly或者private static修饰。
lock 语句 - C# 参考 | Microsoft Learn
Lock锁演示
创建一个控制台应用程序,该应用程序使用lock关键字来控制奇数线程和偶数线程的打印,要求首先执行偶数线程,然后执行奇数线程。 根据题目要求,代码如下。
1 | using System; |
运行该程序,结果如下: 0 2 4 6 8 1 3 5 7 9
从上面的运行效果可以看出,奇数线程只有在偶数线程完全打印后才执行,每次运行程序打印的效果都是一样的。
在单例模式中使用lock
多线程服务器中使用单例模式,并且使用懒汉模式,需要确保线程安全,多使用lock语句
伪代码
1 | private static readonly locker = new object(); |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ATAO2017,阿宅创造奇迹!!