0

MSDN 告诉我,使用 lock 等同于使用监视器,但更简洁且不易出错

你能给我一个简单的(单一进程)示例,为什么我会Monitor因为无法完成而被迫使用lock

4

1 回答 1

5

你能给我一个简单的(单进程)示例,为什么当锁不够时我会被迫使用监视器?

当然。假设您想在可以获得锁的情况下采取行动但如果其他对象已经拥有它,您不想阻塞超过一定时间:

bool gotMonitor = false;

try
{
    Monitor.TryEnter(monitor, 500, ref gotMonitor);
    if (gotMonitor)
    {
        // Okay, we're in the lock. We can do something useful now.
    }
    else
    {
        // Timed out - do something else
    }
}
finally
{
    if (gotMonitor)
    {
        Monitor.Exit(monitor);
    }
}

(请注意,我故意 使用TryEnter仅返回成功/失败的重载- 我使用的版本更可靠,因为ref参数的设置对于锁定获取而言是原子的。)

于 2013-02-22T10:38:49.590 回答