C ++ kill方法没有不断检查标志

时间:2012-10-17 13:49:58

标签: c++ multithreading c++11

我有几个工作函数,调用可能有不良事件发生的附件函数。如果附件功能确定发生了不好的事情,我希望能够停止工作功能,而无需在工作功能中进行多次标记检查。例如,

struct Worker {
    bool badhappened = false;
    Worker() {
        std::thread([&]() {
            while ( not badhappened );
            // kill the work
        }).detach();
    }
    int WorkComponent {
        if ( badhappening() )
            badhappened = true;
        return someint;
    }
    void DoWork {
        // WorkComponents called several times
    }
}

但我不知道在kill the work打电话。 DoWork在单独的线程中发生并不是问题,但在C ++的线程中似乎没有等效的pthread_kill。是否有一个解决方案不涉及将多个if(badhappened) return;调用放入DoWork

1 个答案:

答案 0 :(得分:6)

长话短说:

没有安全的方法来阻止非合作线程。

是的,有强制关闭线程的工具但是你要求麻烦。唯一安全的方法是就终止政策达成一致。这可以归结为在你写作时经常检查一个标志。

大师的更多信息:

C++ and Beyond 2011: Scott, Andrei and Herb - Ask Us Anything

请参阅30:44有关系统性和原则性线程终止和程序终止的处理是什么?


在POSIX中取消线程也不是一个好主意:

Cancelling a thread using pthread_cancel : good practice or bad