ter*_*ry 19 c linux multithreading pthreads
我使用pthread_create创建了几个子线程.一次,主线程想要杀死所有子线程或者会有段falut.我应该用哪种功能来完成它?我从谷歌搜索了答案,得到了像pthread_kill这样的功能.但是我不知道应该向子线程发送哪个信号来杀死它们.我的运行环境是RHEL 5.4,编程语言是C.
Bil*_*ble 25
一般来说,你真的不想暴力杀死一个子线程,而是你要求它终止.通过这种方式,您可以确保孩子在安全的地方戒烟并清理其所有资源.
我通常用父母和孩子之间的一小部分共享状态来做这件事,以允许父母向每个孩子传达"戒烟请求".这可以是每个子节点的布尔值,由互斥锁保护.子节点定期检查此值(每次循环迭代,或者您的子线程中的任何方便检查点).看到"quit_request"为真,子线程清理并调用pthread_exit
.
在父方面,"kill_child"例程看起来像这样:
acquire shared mutex
set quit_request to true
pthread_join the child
Run Code Online (Sandbox Code Playgroud)
pthread_join可能需要一些时间,具体取决于子项检查其退出请求的频率.确保您的设计可以处理任何延迟.
tor*_*rak 21
可以使用"取消"线程pthread_cancel
.然而,这通常不是最好的做法,尽管在像SEGFAULT这样的极端情况下它可能是一种合理的方法.
您应该使用发送SIG_TERM到每个线程
int pthread_kill(pthread_t thread, int sig);
Run Code Online (Sandbox Code Playgroud)
摆脱所有线程(除了主要)之外的一种快速方法是fork()并继续使用子进程.
不是超级干净......
if (fork()) exit(0); // deals also with -1...
Run Code Online (Sandbox Code Playgroud)