锁都是同一线程内不限制,仅在跨线程时互斥。
同一线程内是不会死锁的,
lock 关键字
lock的底层本身是Monitor来实现的,所以Monitor可以实现lock的所有功能
lock(obj){}
lock(this){} 可能产生死锁,
同一线程内锁定同一对象不会产生死锁。
Monitor
Monitor.Enter(obj)
MOnitor.Exit(obj);
以上两个锁的锁定对象obj 只能是引用类型,不能是null,string,值类型,
注意:定义的锁对象应该是 私有的,静态的,只读的,引用类型的对象,这样可以防止外部改变锁对象
Mutex
mutex是内核级别的锁,消耗较大资源,不适合频繁使用,
mutex是可以跨进程的,比如我们要实现一个软件不能同时打开两次,那么Mutex是可以实现的,而lock和monitor是无法实现的
本文深入探讨了线程同步中的锁机制,包括Monitor、Mutex的使用及其区别。Monitor是lock关键字的底层实现,适用于同一线程内互斥,而Mutex则为内核级锁,支持跨进程同步,适合资源消耗大的场景。同时,文章提到了死锁问题,指出同一线程内锁定同一对象不会导致死锁,并强调了正确设置锁对象的重要性。

1520

被折叠的 条评论
为什么被折叠?



