如何正确使用TBB的concurrent_bounded_concurrent_queue中止?

时间:2017-11-08 14:26:04

标签: c++ concurrency tbb

假设我们有一个带停止标志的典型队列消费者循环:

class consumer {
    atomic<bool> keep_running;
    concurrent_bounded_queue queue;

    void loop() {
        while (keep_running)
            // <- danger zone
            queue.pop();
    }

    void stop() {
        keep_running = false;
        queue.abort();
    }
};

如果按照书面形式使用,stopkeep_running检查之后但在pop之前调用之前将会失败,因为abort只会终止pop个来电进展。

我们也无法使用互斥锁来确保检查和pop以原子方式执行,因为在abort正在进行时我们将无法调用pop

这里的正确用法是什么?

0 个答案:

没有答案