我想在这条线上意识到一些事情:
inline void DecrementPendingWorkItems()
{
if(this->pendingWorkItems != 0) //make sure we don't underflow and get a very high number
{
::InterlockedDecrement(&this->pendingWorkItems);
}
}
我怎样才能做到这一点,以便两个操作作为一个块都是原子的,而不使用锁?
最佳答案
您可以只检查 InterlockedDecrement()
的结果,如果它恰好为负(或者 InterlockedIncrement() 撤消递减。在其他适当的代码中应该没问题。
关于c++ - 减少原子计数器 - 但 <only> 在条件下,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11428753/