是否有一种可靠的方法来强制线程在C中停止? (特别是独立的)
我最近在C 11中使用线程.现在我正在考虑如何强制停止线程.我无法在stackoverflow上找到它,也试过这些.
>每个线程一个变量:不太可靠 我没有更多的想法.我听说过WinAPI,但我想要一个便携式解决方案. (这也意味着我不会使用fork()) 你能帮我解决一个问题吗?我真的很想这样做. 解决方法
在C中强制关闭线程的最大问题之一是RAII违规.
当一个函数(以及随后的一个线程)正常完成时,它所持有的一切都由函数/线程创建的对象的析构函数优雅地清理. 内存被释放, 如果你粗暴地杀死一个线程(例如,在Windows上通过TerminateThread),实际上不会发生这些,并且程序处于非常危险的状态. 可以使用的一个(不那么)常见模式是注册一个“取消令牌”,如果其他线程要求,您可以监视并正常关闭该线程(一个TPL / PPL).就像是 auto cancellationToken = std::make_shared<std::atomic_bool>(); cancellationToken->store(false); class ThreadTerminator : public std::exception{/*...*/}; std::thread thread([cancellationToken]{ try{ //... do things if (cancellationToken->load()){ //somone asked the thred to close throw ThreadTerminator (); } //do other things... if (cancellationToken->load()){ //somone asked the thred to close throw ThreadTerminator (); } //... }catch(ThreadTerminator){ return; } }); 通常,人们甚至不为一个小任务打开一个新线程,最好将多线程应用程序视为并发任务和并行算法的集合.一个为一些长期持续的后台任务打开一个新线程,通常在某种循环中执行(例如,接受传入的连接). 所以,无论如何,要求取消小任务的案例很少见. tldr:
没有. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |