Saj*_*ani 39 c multithreading posix pthreads
我使用pthread_create(&thread1, &attrs, //... , //...);
并需要一些条件发生需要杀死这个线程如何杀死这个?
Ant*_*ima 55
首先存储线程ID
pthread_create(&thr, ...)
Run Code Online (Sandbox Code Playgroud)
后来打电话
pthread_cancel(thr)
Run Code Online (Sandbox Code Playgroud)
但是,这不是推荐的编程习惯!最好使用信号量或消息之类的线程间通信机制来与线程通信它应该停止执行.
请注意,pthread_kill(...)实际上不会终止接收线程,而是向其发送信号,并且它取决于信号和信号处理程序会发生什么.
ale*_*cov 22
这个问题有两种方法.
sigaction()
它设置一个标志,并且线程定期检查该标志以查看它是否必须终止.当线程必须终止时,使用pthread_kill()
并向其发出信号并等待终止pthread_join()
.这种方法需要父线程和子线程之间的预同步,以保证子线程在能够处理终止信号之前已经安装了信号处理程序;pthread_cancel()
并等待终止pthread_join()
.这种方法需要详细使用pthread_cleanup_push()
并pthread_cleanup_pop()
避免资源泄漏.最后两次调用可能会破坏代码的词法范围(因为它们可能是宏生成{
和}
令牌)并且很难正确维护.(请注意,如果您已经使用了分离线程pthread_detach()
,则无法再使用它加入pthread_join()
.)
这两种方法都非常棘手,但在特定情况下可能特别有用.