gpt4 book ai didi

c# - 在 C# 中一起锁定 2 个对象

转载 作者:太空宇宙 更新时间:2023-11-03 19:13:10 24 4
gpt4 key购买 nike

有什么方法可以同时锁定 2 个不同的对象?我尝试使用 lock(obj1, obj2){...} 但出现此错误:

invalid expression term ','

更新:正如许多用户告诉我尝试只使用一个锁一样,我很欣赏他们的建议,因为大多数时候它更可取,我只想展示一个我认为对 2 个对象使用锁更合理的案例。考虑在不同线程之间共享 2 个队列的情况。您需要避免同时执行 Enqueue(item)Dequeue()。现在,在代码的特定部分,您想要从一个队列中获取一个元素并将其插入到第二个队列中。我知道可以这样做:

var itme;
lock(_lock1)
{
item = q1.Dequeue();
Monitor.Pulse(_lock1);
}
lock(_lock2)
{
q2.Enqueue(item);
Monitor.Pulse(_lock2);
}

但我认为同时锁定 _lock1_lock2 更具可读性和简洁性。

最佳答案

我强烈建议您使用一个锁来避免死锁,并且您应该锁定一个单独的引用,而不是您要修改的对象。

class MyClass
{
private readonly object _lock = new object();
private readonly List<int> _myList = new List<int>();
private int _index;

public void MyOperation()
{
lock(_lock)
{
_index++;
}
}

public void MyOperation2()
{
lock(_lock)
{
_myList[_index] = 27;
}
}
}

关于c# - 在 C# 中一起锁定 2 个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19027300/

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