如何使用锁同步两个函数
本文关键字:两个 函数 何使用 同步 | 更新日期: 2023-09-27 18:15:10
我有两个函数A和B,我想阻止它们同时运行。我应该使用锁或互斥或联锁?
这是我尝试过的:
class C
{
object obj = new Object();
void A()
{
lock(obj)
{
// do stuff
}
}
void B()
{
lock(obj)
{
// do stuff
}
}
}
如果我想让A检查B是否被锁定并返回我该怎么做呢?
有更好的解决方案吗?
您拥有的代码将防止两个不同的线程同时调用A
和B
(在C
的同一实例上)-尽管请注意,如果A
调用B
(或B
调用A
)它将工作。调用将被阻塞,直到它可以获得lock
。
如果您想检查是否可以在不阻塞的情况下获得lock
-您可以通过TryEnter
指定零超时来完成:
bool lockTaken = false;
try {
Monitor.TryEnter(obj, 0, ref lockTaken);
if(lockTaken) {
// have lock etc
}
} finally {
if(lockTaken) Monitor.Exit(obj);
}