在.NET中,有沒有一種方法可以計算信號量。我不需要線程安全計數,只需要一個合理的近似值就可以在GUI線程上報告狀態。信號量計數
目前我正在使用雙計數器。真正的信號量和另一個同步增加和減少的變量,但這是令人討厭和容易出錯的。
在.NET中,有沒有一種方法可以計算信號量。我不需要線程安全計數,只需要一個合理的近似值就可以在GUI線程上報告狀態。信號量計數
目前我正在使用雙計數器。真正的信號量和另一個同步增加和減少的變量,但這是令人討厭和容易出錯的。
爲了做到這一點,你必須將(信號量)子類包裝成子類。既然你不關心線程的安全性,那也不會那麼難。
而不是信號量,你可以使用Interlocked.Increment和Interlocked.Decrement。這將允許您輕鬆讀取當前值,因爲它是一個常規變量。
如果在計數達到0的情況下將它與某種互斥鎖結合使用,那麼應該完成工作。從你選擇的互斥或WaitHandle繼承將會給你一個很好的可重用組件。
查看Interlocked班。
你剛剛描述了我說我已經在做的事情。 – 2009-07-17 19:55:15
Process Explorer以某種方式執行它。它可能涉及深度的Windows API魔術,因爲它提取了最大計數以及當前計數。
您也可以嘗試的
int old_count=0;
if (AcquireSemaphore(timeout=0)) {
ReleaseSemaphore(&old_count);
old_count += 1;
}
道德相當於但這需要提醒的是它輕輕地侵入到使用旗語代碼。
感嘆,我擔心你會這麼說。 – 2009-07-17 19:55:46