一位同事最近询问了我对他正在修改的线程安全队列类的看法。 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 ++返回空指针似乎很笨拙并且过时了,给用户带来了负担。我更喜欢抛出异常或完全忽略它,迫使用户合作关闭。
我的问题是处理这种情况的最佳方法是什么?