想象这段代码:
你有2个阵列,你需要在同一时刻锁定它们(出于任何原因 - 你只需要保持锁定它们,因为它们以某种方式相互依赖) - 你可以嵌套锁
lock (array1)
{
lock (array2)
{
... do your code
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果代码的其他部分中有人会这样做,这可能会导致死锁
lock (array2)
{
lock (array1)
{
... do your code
}
}
Run Code Online (Sandbox Code Playgroud)
并且数组1被锁定 - 执行上下文切换 - 然后数组2被第二个线程锁定.
有没有办法以原子方式锁定它们?如
lock_array(array1, array2)
{
....
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以创建一些额外的"锁定对象"并在我的代码中锁定而不是两个数组,但这对我来说似乎不正确...
通常,您应该避免锁定可公开访问的成员(在您的情况下为数组).你宁愿让private static object你锁定.