Skip to main content
 首页 » 编程设计

c#之c#中的锁定机制

2024年01月21日27bhlsheji

我想实现一种锁定机制,以便只有一个线程可以运行一段代码。 但我不希望其他线程等待锁定对象,如果它被锁定,它们不应该做任何事情。所以它与标准锁定机制略有不同。

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 可能更有效。