gpt4 book ai didi

C++ kill方法无需不断检查标志

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:25:45 25 4
gpt4 key购买 nike

我有几个工作函数,它们会调用可能会发生坏事的辅助函数。我希望能够在辅助功能确定发生错误时停止工作功能,而无需在工作功能中进行大量标志检查。例如,

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++ and Beyond 2011: Scott, Andrei and Herb - Ask Us Anything

见30:44 有系统有原则的线程终止和程序终止是怎么回事?


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

Cancelling a thread using pthread_cancel : good practice or bad

关于C++ kill方法无需不断检查标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12935888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com