gpt4 book ai didi

.net - 两个对象上的 SyncLock

转载 作者:行者123 更新时间:2023-12-02 08:57:51 25 4
gpt4 key购买 nike

假设我有两个对象 ab

我想在两个对象上同步锁定。

这可行吗?可以通过嵌套的SyncLock语句来完成吗?这样的操作有什么危险?

编辑

也许我应该问,如何通过重构来避免死锁?

最佳答案

嵌套锁可以工作——但是其中一个危险是需要始终以相同的顺序锁定对象,否则可能会导致死锁。


编辑:要回答关于尝试强制正确的锁顺序的第二个问题:

避免这种情况的可能解决方案是将锁定封装到一个通用的锁定方法中,如下所示:

public void LockAndDoWork(Action action)
{
lock(lockObject1)
{
lock(lockObject2)
{
action();
}
}
}

然后可以这样使用:

Thread1: LockAndDoWork(() => {do some work....});
Thread2: LockAndDoWork(() => {do some other work...});

这有助于避免这一潜在问题 - 如果可以限制客户端代码对这些对象的可见性,这将特别有用

关于.net - 两个对象上的 SyncLock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3503919/

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