有什么办法可以同时锁定 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
更具可读性和清洁性。