以不同方法开始和完成锁定

时间:2011-05-30 20:44:51

标签: c# .net multithreading locking parallel-processing

我想 - 由于晦涩的原因,你不应该质疑 - 开始锁定方法,然后在另一个方法中结束。不知何故喜欢:

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解决方案持开放态度。 :)

1 个答案:

答案 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);
}