2009-07-16 188 views
4

在.NET中,有沒有一種方法可以計算信號量。我不需要線程安全計數,只需要一個合理的近似值就可以在GUI線程上報告狀態。信號量計數

目前我正在使用雙計數器。真正的信號量和另一個同步增加和減少的變量,但這是令人討厭和容易出錯的。

回答

0

爲了做到這一點,你必須將(信號量)子類包裝成子類。既然你不關心線程的安全性,那也不會那麼難。

+0

感嘆,我擔心你會這麼說。 – 2009-07-17 19:55:46

2

而不是信號量,你可以使用Interlocked.Increment和Interlocked.Decrement。這將允許您輕鬆讀取當前值,因爲它是一個常規變量。

如果在計數達到0的情況下將它與某種互斥鎖結合使用,那麼應該完成工作。從你選擇的互斥或WaitHandle繼承將會給你一個很好的可重用組件。

查看Interlocked班。

+0

你剛剛描述了我說我已經在做的事情。 – 2009-07-17 19:55:15

0

Process Explorer以某種方式執行它。它可能涉及深度的Windows API魔術,因爲它提取了最大計數以及當前計數。

您也可以嘗試的

int old_count=0; 
if (AcquireSemaphore(timeout=0)) { 
    ReleaseSemaphore(&old_count); 
    old_count += 1; 
} 

道德相當於但這需要提醒的是它輕輕地侵入到使用旗語代碼。