在.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