我正在使用C++ 11,其中有4个线程以并行方式插入并发队列。我知道线程何时完成处理,即预期的队列最终大小。

现在,我想对应该由严格执行,仅由执行一次的队列内容执行最终的聚合操作。例如,假设我要汇总值并将其发布到外部服务。

如何获得仅有效一次的锁?我不能使用简单的互斥锁,因为那不能保证我只有一次的需求。

伪代码:

// inside a thread
enqueue items to concurrent_queue

if(concurrent_queue.size() == EXPECTED_SIZE) {
    // do something ONLY once
}

最佳答案

一个简单的解决方案。

if(concurrent_queue.size() == EXPECTED_SIZE) {
    // do something ONLY once
    static bool doItOnce = DoItOnceOnly();
}

关于c++ - 抢在C++中仅有效一次的锁,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26609588/

10-11 01:09