我想在这条线上意识到一些事情:

        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/

10-13 03:39