我想实现这个东西线下:递减原子计数器 - 但<only>条件
inline void DecrementPendingWorkItems()
{
if(this->pendingWorkItems != 0) //make sure we don't underflow and get a very high number
{
::InterlockedDecrement(&this->pendingWorkItems);
}
}
我怎么能做到这一点,使这两个操作都是原子作为一个块,而无需使用锁?
无关你的实际问题,但如果不要'pendingWorkItems'为零或负数,你应该使用'>'比较运算符来代替。它可以保护'pendingWorkItems'变为负数的错误。 – 2012-07-11 08:46:58
@JoachimPileborg变量无符号使用的API所需的, – Ghita 2012-07-14 18:34:43
@Ghita'InterlockedDecrement'将指针指向'LONG',它实际上是一个有符号值。 – dgnuff 2016-04-08 18:34:07