2009-07-16 127 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; 
} 

道德相当于但这需要提醒的是它轻轻地侵入到使用旗语代码。