【发布时间】:2014-10-28 13:27:52
【问题描述】:
我正在使用 C++ 11,其中有 4 个线程并行插入到并发队列中。我知道线程何时完成处理,即队列的预期最终大小。
现在,我想对队列的内容执行最终聚合操作,该操作应该严格只执行一次。例如,假设我想汇总这些值并将其发布到外部服务。
如何获得只有效一次的锁?我不能使用简单的互斥锁,因为那不能保证我只有一次要求。
伪代码:
// inside a thread
enqueue items to concurrent_queue
if(concurrent_queue.size() == EXPECTED_SIZE) {
// do something ONLY once
}
【问题讨论】:
-
std::call_once怎么样? -
你可能想要使用锁存器或信号量,所有线程在完成处理后都尝试获取锁,一旦所有线程都进行了调用,只有一个线程被释放.
标签: c++ multithreading c++11 concurrency locking