gpt4 book ai didi

C# 适当的锁定

转载 作者:太空宇宙 更新时间:2023-11-03 15:44:15 25 4
gpt4 key购买 nike

假设我执行了这样的操作:

A.B.C.add(new D());
A.B.add(new C));
A.add(new B));

这些操作同时执行。想象一下,这些是三种不同的方法。

lock(A.B.C)
A.B.C.add(new D());

lock(A.B)
A.B.add(new C));

lock(A)
A.add(new B));

这些锁是独立的吗?换句话说 - 这些 Action 会同时执行,还是仅在前一个 Action 完成后才执行?

如果它是正确的 - 它是设置锁的最有效方法吗?

编辑

我有很多这样的调用(这 3 种方法被调用了很多次)。

最佳答案

是的,锁是相互独立的。 lock 语句实际上在参数实例上创建了一个监视器,它没有考虑您实际到达那里的方式(即属性链 A.B.C)。

但是,您的代码存在一个微妙的问题。由于锁是独立的,并且三个锁语句可能同时执行,任何像

lock(A.B.C)
A.B.C.Add(new D());

是危险的,因为当获得锁时,属性 A.B.C 可能已经改变。因此,为此使用局部变量会更好(即更安全):

var c = A.B.C;
lock(c)
c.Add(new D());

关于C# 适当的锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28921187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com