Laz*_*zlo 7 .net c# parallel-processing multithreading locking
我想 - 由于晦涩的原因,你不应该质疑 - 开始锁定方法,然后在另一个方法中结束.不知何故喜欢:
object mutex = new object();
void Main(string[] args)
{
lock (mutex)
{
doThings();
}
}
Run Code Online (Sandbox Code Playgroud)
会有如下行为:
object mutex = new object();
void Main(string[] args)
{
Foo();
doThings();
Bar();
}
void Foo()
{
startLock(mutex);
}
void Bar()
{
endlock(mutex);
}
Run Code Online (Sandbox Code Playgroud)
当然,问题是lock关键字以块语法工作.我知道锁并不意味着像这样使用,但我不仅仅对S/O的创意和hacky解决方案持开放态度.:)
Ale*_*Aza 16
private readonly object syncRoot = new object();
void Main(string[] args)
{
Foo();
doThings();
Bar();
}
void Foo()
{
Monitor.Enter(syncRoot);
}
void Bar()
{
Monitor.Exit(syncRoot);
}
Run Code Online (Sandbox Code Playgroud)
[ 编辑 ]
当你使用时lock
,这就是.NET 4中引发的内容:
bool lockTaken = false;
try
{
Monitor.Enter(syncRoot, ref lockTaken);
// code inside of lock
}
finally
{
if (lockTaken)
Monitor.Exit(_myObject);
}
Run Code Online (Sandbox Code Playgroud)