2012-06-22 39 views
3

後,我想我失去了一些東西有關Monitor.EnterMonitor.TryEnter正確的行爲。下面是一段代碼,我寫了這個問題從代碼的其餘部分分開:Monitor.TryEnter總是返回true甚至只是Monitor.Enter

object lockObj = new object(); 
bool result = Monitor.TryEnter(lockObj); 
Console.Write(result); 

結果總是true。這裏沒有驚喜。

object lockObj = new object(); 
Monitor.Enter(lockObj); 
bool result = Monitor.TryEnter(lockObj); 
Console.Write(result); 

但是這一次它也是trueMonitor.Enter之後是否鎖定lockObj?請給我一些新的看看這個。

回答

7

這是因爲你在同一個線程這樣做。

而且記住,(MSDN):

是合法的同一個線程調用多次輸入 更離不開它阻塞;然而,退出通話相等數量必須 其他線程正在等待的對象之前調用將解鎖

+3

你是對的。我認爲,'Monitor.TryEnter'的[文件](http://msdn.microsoft.com/en-us/library/4tssbxcw)應該多一點點明確有關。 – rotman

0

一個已經獲得了顯示器始終允許reaquire它(以允許重新enterant代碼相同的線程)。