以不同的方法开始和结束锁定
本文关键字:结束 锁定 开始 方法 | 更新日期: 2023-09-27 17:57:55
出于不明确的原因,我想在一个方法中启动一个锁,然后在另一个方法结束它。不知怎么的:
object mutex = new object();
void Main(string[] args)
{
lock (mutex)
{
doThings();
}
}
将具有与相同的行为
object mutex = new object();
void Main(string[] args)
{
Foo();
doThings();
Bar();
}
void Foo()
{
startLock(mutex);
}
void Bar()
{
endlock(mutex);
}
当然,问题是lock关键字在块语法中起作用。我知道锁不应该这样使用,但我对S/O的创造性和技巧性解决方案持开放态度:)
private readonly object syncRoot = new object();
void Main(string[] args)
{
Foo();
doThings();
Bar();
}
void Foo()
{
Monitor.Enter(syncRoot);
}
void Bar()
{
Monitor.Exit(syncRoot);
}
[编辑]
当您使用lock
时,这就是中引擎盖下发生的情况。网络4:
bool lockTaken = false;
try
{
Monitor.Enter(syncRoot, ref lockTaken);
// code inside of lock
}
finally
{
if (lockTaken)
Monitor.Exit(_myObject);
}