gpt4 book ai didi

C#线程同步

转载 作者:太空宇宙 更新时间:2023-11-03 11:33:04 25 4
gpt4 key购买 nike

我需要使用锁定对象,但它已被另一个线程使用。我希望等待锁定对象空闲,但不知道如何执行此操作。

我发现了这样的东西:

if(Monitor.TryEnter(_lock)
{
try
{
// do work
}
finally
{
Monitor.Exit(_lock);
}

}

但我只是检查并继续,但我希望等到锁定对象空闲。

最佳答案

要么使用这个:

Monitor.Enter(_lock)

try
{
// do work
}
finally
{
Monitor.Exit(_lock);
}

或者 - 更优选 - lock 关键字:

lock(_lock)
{
// do work
}

事实上,那些代码片段会生成相同的代码。编译器会将第二个代码翻译成第一个代码。然而,第二个是首选,因为它更具可读性。

更新:
锁属于获取它的线程。这意味着可以嵌套使用 lock 语句:

void MethodA()
{
lock(_lock)
{
// ...
MethodB();
}
}

void MethodB()
{
lock(_lock)
{
// ...
}
}

上面的代码不会阻塞。

关于C#线程同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7173983/

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