我想 - 由于晦涩的原因,你不应该质疑 - 开始锁定方法,然后在另一个方法中结束。不知何故喜欢:
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的创意和hacky解决方案持开放态度。 :)
答案 0 :(得分:16)
private readonly object syncRoot = new object();
void Main(string[] args)
{
Foo();
doThings();
Bar();
}
void Foo()
{
Monitor.Enter(syncRoot);
}
void Bar()
{
Monitor.Exit(syncRoot);
}
[修改强>
使用lock
时,这就是.NET 4中引发的内容:
bool lockTaken = false;
try
{
Monitor.Enter(syncRoot, ref lockTaken);
// code inside of lock
}
finally
{
if (lockTaken)
Monitor.Exit(_myObject);
}