gpt4 book ai didi

c# - Monitor.TryEnter检查对象是否已锁定?

转载 作者:行者123 更新时间:2023-12-03 13:12:43 27 4
gpt4 key购买 nike

我有许多调用通用函数的工作线程。我使用锁定对象,如下所示:

static object var mylock = new object();

public void myFunction()
{
if (Monitor.TryEnter(mylock, 0))
{
try
{
// Do work
}
finally
{
Monitor.Exit(mylock);
}
}
}

但是,在输入myFunction之前,我想知道对象是否被锁定,以便可以执行其他操作。所以我做了:
    public bool IsLocked
{
get { return !Monitor.TryEnter(locker); }
}

这将起作用,还是将对象锁定?

最佳答案

如果未锁定对象,它将锁定该对象,并且直到您调用exit才会释放该锁定。如果另一个线程已经获取了该锁,则它不会获取该锁,但是如果您首先在获取该锁的线程上进行调用,那么TryEnter将成功。

为了解决这个问题,您可以使用标志和互锁的函数:

object var mylock = new object();
long isLocked;

public void myFunction()
{
if (Monitor.TryEnter(mylock, 0))
{
Interlocked.Exchange(ref isLocked, 1);
try
{
// Do work
}
finally
{
Interlocked.Exchange(ref isLocked, 0);
Monitor.Exit(mylock);
}
}
}

public bool IsLocked
{
get { return Interlocked.Read(ref isLocked)==0; }
}

关于c# - Monitor.TryEnter检查对象是否已锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21798035/

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