gpt4 book ai didi

c# - 锁定在代码执行期间可能更改的对象

转载 作者:太空狗 更新时间:2023-10-29 22:20:05 27 4
gpt4 key购买 nike

假设我有一个锁定对象引用的线程

线程 #1

lock(myObj) { ... }

稍后在代码中我有 myObj = new XYZObj();

然后线程 #2 锁定它

lock(myObj) { ... }

如果对象引用已更改,此代码是否是线程安全的?当对象引用发生变化时,第一个锁是否仍然有效?

最佳答案

锁作用于实例,而不是变量。
lock 语句将保存自己对实例的引用,以便它只会退出您输入的实例。

spec说:

where x is an expression of a reference-type, is precisely equivalent to

System.Threading.Monitor.Enter(x);
try {
...
}
finally {
System.Threading.Monitor.Exit(x);
}

except that x is only evaluated once.

如果您在两个锁之间重新分配变量,您将在两个不同的实例上获得两个有效锁。

但是,一般来说,您永远不应该这样做;这是导致细微错误和竞争条件的良方。
您应该只锁定专用的只读锁定对象。

关于c# - 锁定在代码执行期间可能更改的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8578870/

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