我想實現這個東西線下:遞減原子計數器 - 但<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