什么是关闭条件变量的正确方法

时间:2014-08-15 17:10:26

标签: c++ multithreading condition-variable

一位同事最近询问了我对他正在修改的线程安全队列类的看法。 waitAndPop方法的缩短版本如下:

std::shared_ptr<T> waitAndPop() {
    std::unique_lock<std::mutex> lock(mut);
    dataCond.wait(lock, [this] { return (!dataQueue.empty() || !queueAlive);});

    if (dataQueue.empty() || !queueAlive)
        return std::shared_ptr<T>(); // NULL

    std::shared_ptr<T> result = dataQueue.front();
    dataQueue.pop();
    return result;
}

这些类的常见困境是如何处理在关闭时等待的条件。在这种情况下,他最终返回一个空指针。从现代C ++返回空指针似乎很笨拙并且过时了,给用户带来了负担。我更喜欢抛出异常或完全忽略它,迫使用户合作关闭。

我的问题是处理这种情况的最佳方法是什么?

0 个答案:

没有答案