gpt4 book ai didi

c - 如何从父线程中杀死子线程 - C

转载 作者:太空宇宙 更新时间:2023-11-03 23:19:34 25 4
gpt4 key购买 nike

我有一个只有几个进程的小程序,每个进程包含几个线程。

当父进程收到特定消息时,它应该杀死所有子线程并销毁所有互斥体。问题是这些线程中的一些可能会被阻塞(在 I/O 命令上),因此无法接收一些信号或消息来完成它们的过程。

我考虑过使用 pthread_cancel 并覆盖 cancel routine 但问题是当 cancel signal已发送,因此无法销毁。
使用 pthread_kill 也不起作用,因为它会杀死整个进程,因此在我想要干净退出时无法使用。

进程如何以干净的方式终止其子线程并销毁互斥锁​​?

代码的相关部分如下所示:

ret = fork()
if(ret > 0) {
pthread_t th1, th2;
my_pthread_create(&th1, threadFunction1, NULL);
my_pthread_create(&th2, threadFunction2, NULL);
if(msgrcv(qid1, &msg, MSG_SIZE,0,0) < 0) {
perror("msgrcv failed...\n");
} else {
//print some information from the global variables, terminate
//threads and destroy mutexes
}
}
else if(ret<0) {
perror("fork failed...\n");
} else {
....
}

任何帮助将不胜感激!
谢谢

最佳答案

scoped_lock

是您可以使用的最佳选择之一,当程序执行超出范围时,它会自动释放互斥量。

话虽如此,我不建议在生产就绪代码中终止线程,除非确实有必要并且没有其他选择,您还可以使用信号机制来通知线程自行终止,这样可以避免很多问题。例如,您可以在线程内为特定信号设置一个等待函数,并在收到信号后立即退出线程。

关于c - 如何从父线程中杀死子线程 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44461828/

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