C 杀死方法无需不断检查标志

C++ kill method without constantly checking flags

本文关键字:检查 标志 方法      更新时间:2023-10-16

我有几个工作功能,可以调用附件功能,这些功能可能会发生不好的事情。如果附件函数确定发生了不良的事情,我希望能够停止工作功能,而不会在工作功能中放置许多标志检查。例如,

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

长话短说:

没有安全的方法来停止非合件线程。

是的,有一些工具可以强行关闭线程,但您正在要求麻烦。唯一安全的方法是同意终止政策。这归结为在您写作时经常检查旗帜。

来自大师的更多信息:

C 和2011年以后:Scott,Andrei和Herb-问我们任何事情

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


取消线程也不是POSIX中的好主意:

使用pthread_cancel取消线程:好的练习或不良