2015-09-11 22 views
0

我想做一個線程安全的方法。我有這個代碼來測試它。如何退出如果鎖定

private static readonly Object objLock = new Object(); 

    static void Main(string[] args) 
    { 

     // Create ten new threads. 
     for (int i = 0; i < 10; i++) 
     { 
      ThreadStart start = new ThreadStart(LockTest); 
      new Thread(start).Start(); 
     } 

     Console.Read(); 
    } 

    public static void LockTest() 
    { 
     lock (objLock) 
     { 
      Thread.Sleep(1000); 
      Console.WriteLine(TimeSpan.FromMilliseconds(Environment.TickCount).Seconds.ToString()); 
     } 
    } 

這工作,但我想這樣做是如果鎖是在地方,我需要其他線程退出,而不是等待,當鎖被釋放執行代碼。這可能嗎?謝謝。

回答

1

你應該使用Monitor Class它給你比鎖更多的功能。標準鎖定用法基本相同。

使用TryEnter函數來查看您是否可以獲取鎖。如果不是,那就退出線程。不要忘記手動釋放鎖。

0

其實,lock (objLock) { ...} wird轉換成

Monitor.Enter(objLock); try { ... } finally { Monitor.Exit(objLock); }

也許你可以使用的,而不是Monitor.TryEnter(objLock, TimeSpan.Zero)Monitor.Enter(objLock)嘗試獲得鎖無需等待。

我之前沒有在Monitor上使用TimeSpan.Zero,所以先試一下。