gpt4 book ai didi

C# 手动锁定/解锁

转载 作者:IT王子 更新时间:2023-10-29 04:36:12 28 4
gpt4 key购买 nike

我在 C# 中有一个可以从多个线程调用多次的函数,我希望它只执行一次,所以我想到了这个:

class MyClass
{
bool done = false;
public void DoSomething()
{
lock(this)
if(!done)
{
done = true;
_DoSomething();
}
}
}

问题是 _DoSomething 需要很长时间,我不希望许多线程在看到 done 为真时等待它。
像这样的事情可能是一种解决方法:

class MyClass
{
bool done = false;
public void DoSomething()
{
bool doIt = false;
lock(this)
if(!done)
doIt = done = true;
if(doIt)
_DoSomething();
}
}

不过手动加锁和解锁会好很多。
我怎样才能像 lock(object) 那样手动锁定和解锁?我需要它使用与 lock 相同的接口(interface),以便这种手动方式和 lock 会相互阻塞(对于更复杂的情况)。

最佳答案

lock 关键字只是 Monitor.Enter 和 Monitor.Exit 的语法糖:

Monitor.Enter(o);
try
{
//put your code here
}
finally
{
Monitor.Exit(o);
}

相同
lock(o)
{
//put your code here
}

关于C# 手动锁定/解锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5818362/

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