Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么';这是关闭条件变量的正确方法_C++_Multithreading_Condition Variable - Fatal编程技术网

C++ 什么';这是关闭条件变量的正确方法

C++ 什么';这是关闭条件变量的正确方法,c++,multithreading,condition-variable,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() || !

一位同事最近询问了我对他正在修改的线程安全队列类的看法。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;
}
std::shared_ptr waitAndPop(){
std::唯一锁定(mut);
dataCond.wait(锁定,[this]{返回(!dataQueue.empty()| | |!queueAlive);});
if(dataQueue.empty()| |!queueAlive)
返回std::shared_ptr();//NULL
std::shared_ptr result=dataQueue.front();
dataQueue.pop();
返回结果;
}
这类类类的一个常见难题是如何处理在关闭时中断等待条件。在本例中,他最终返回一个空指针。从现代C++返回空指针似乎是笨拙过时的,给用户带来负担。我更喜欢抛出一个异常或完全忽略它,迫使用户协同关闭

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

相关的: