我想实现一种锁定机制,以便只有一个线程可以运行一段代码。 但我不希望其他线程等待锁定对象,如果它被锁定,它们不应该做任何事情。所以它与标准锁定机制略有不同。
if (block is not locked)
{
// Do something
}
else
{
// Do nothing
}
在 C# 中执行此操作的最佳方法是什么。
请您参考如下方法:
那么你应该使用 Monitor Class 而不是使用锁.
Excerpt: Monitor.TryEnter() example from MSDN
// Request the lock.
if (Monitor.TryEnter(m_inputQueue, waitTime))
{
try
{
m_inputQueue.Enqueue(qValue);
}
finally
{
// Ensure that the lock is released.
Monitor.Exit(m_inputQueue);
}
return true;
}
else
{
return false;
}
作为Marc Gravell注意,waitTime 可以选择为零。根据不同的场景,10ms 或 100ms 可能更有效。
