为了账号安全,请及时绑定邮箱和手机立即绑定

C#中的重入锁

C#中的重入锁

慕尼黑5688855 2019-11-26 14:27:17
以下代码是否会在.NET上使用C#导致死锁? class MyClass {    private object lockObj = new object();    public void Foo()    {        lock(lockObj)        {              Bar();        }    }    public void Bar()    {        lock(lockObj)        {           // Do something         }    }        }
查看完整描述

3 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

如果线程已经持有锁,那么它将不会自身阻塞。.Net框架确保了这一点。您只需要确保两个线程都不会尝试通过任何代码路径乱序获取相同的两个锁。

同一线程可以多次获取相同的锁,但是必须确保释放锁的次数与获取锁的次数相同。当然,只要您使用“ lock”关键字来完成此操作,它就会自动发生。


查看完整回答
反对 回复 2019-11-26
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

不,此代码不会有死锁。如果您确实要创建死锁,则最简单的死锁至少需要2个资源。考虑狗和骨头的情况。一只狗对一根骨头有完全的控制权,所以其他任何一只狗都必须等待。2.最少需要2条带有2条骨头的狗才能分别在锁定骨头和寻找其他骨头时产生死锁。

..依此类推,n条狗和多条骨头,造成更复杂的死锁。


查看完整回答
反对 回复 2019-11-26
  • 3 回答
  • 0 关注
  • 854 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信