gpt4 book ai didi

c# - 当您需要锁定多个对象时如何防止死锁

转载 作者:太空狗 更新时间:2023-10-30 00:19:48 25 4
gpt4 key购买 nike

想象这段代码:

你有 2 个数组,你需要同时锁定它们(出于任何原因 - 你只需要保持锁定它们,因为它们在某种程度上相互依赖) - 你可以嵌套锁

lock (array1)
{
lock (array2)
{
... do your code
}
}

但这可能会导致死锁,以防你的代码其他部分的人这样做

lock (array2)
{
lock (array1)
{
... do your code
}
}

并且数组 1 被锁定 - 执行上下文切换 - 然后数组 2 被第二个线程锁定。

有没有办法自动锁定它们?比如

lock_array(array1, array2)
{
....
}

我知道我可以创建一些额外的“锁定对象”并锁定它而不是我代码中所有的两个数组,但这对我来说似乎不正确...

最佳答案

一般来说,您应该避免锁定可公开访问的成员(在您的案例中是数组)。您宁愿拥有一个要锁定的私有(private)静态对象

关于c# - 当您需要锁定多个对象时如何防止死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16664897/

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