2011-03-30 87 views
1

工作線程數有沒有辦法找到等待的線程數和信號量

  1. 多少線程正在等待信號?
  2. 目前有多少線程佔用信號量?
  3. 如果我使用線程池線程來等待信號量,如何讓主線程等待線程池線程完成。

謝謝。

+0

如果我使用Thread類,則可以解決第三點。但是前兩點呢? – Azodious 2011-03-30 11:22:24

+0

什麼樣的信號量? Semaphore,SemaphoreSlim或Windows信號量對象? – 2011-03-30 11:28:27

+0

它是一個信號量。不是SemSlim或Windows信號量對象。 – Azodious 2011-03-30 11:37:20

回答

7

這是被禁止的知識在線程同步。因爲完全無法做到這一點是完全不可能的。它代表了一個無法解決的競爭條件。當你使用Habjan的方法時,你會得出結論,有兩個線程正在等待。一微秒後另一個線程調用WaitOne()有三個。但是你會根據陳舊的價值做出決定。

競爭條件沒有什麼可混淆的,它們難以置信地難以調試。他們習慣於讓您的代碼每週只能失敗一次。只要您添加工具代碼以嘗試診斷代碼失敗的原因,它們就會停止發生,因爲添加的代碼改變了時間。

從來沒有做到這一點。

+0

好的...明白了你的觀點。 – Azodious 2011-03-31 11:28:52