取消c 11异步任务
如何停止/取消使用std :: async和policy std :: launch :: async创建的异步任务?换句话说,我已经开始一个任务运行在另一个线程,使用未来的对象.有没有办法取消或停止正在运行的任务?
解决方法
总而言之
更长的解释:没有安全的方法来取消标准C中的任何线程.这将需要线程取消.这个功能在C11标准化过程中被多次讨论,普遍的共识是没有安全的方法.据我所知,C有三种主要考虑线程取消的方法. >中止线程.这就像一个紧急停止.不幸的是,它不会导致调用堆栈解析或析构函数.线程可能处于任何状态,因此可能会持有互斥体,堆分配的数据将被泄漏等.这显然永远不会被考虑很久,因为它会使整个程序未定义.如果你想自己做,但是只需要使用native_handle来做到这一点.然而,它将是不可移植的. 我只是使用一个变体3.如果你使用lambdas,这将是很容易引用一个原子“取消”变量,你可以不时检查. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |