【发布时间】:2011-10-10 07:26:16
【问题描述】:
我有一个多线程应用程序。该应用程序具有以下线程集:
休眠的主线程。所有信号都在这个线程中被阻塞。
执行所有处理的线程 t1。所有信号都在这个线程中被阻塞。
由我使用的第三方组件设置的信号处理线程 (t2)。该线程仅等待 SIGINT 和 SIGKILL 信号。所有其他信号都在此线程中被阻止。
我自己的自定义信号处理线程 (t3)。
现在,为了处理进程退出,我向我的进程发送了一个 SIGUSR1。该信号将被线程 t3 捕获。线程 t3 将调用清理例程并退出。这里的问题是线程 t3 试图清理其他线程访问的资源。这将导致间歇性崩溃。
显然,我目前的解决方案没有优雅的进程退出处理。我的问题是在这种情况下应该如何处理进程退出?信号处理线程应该如何停止剩余线程然后退出进程?
或者有比发送信号 (SIGUSR1) 终止进程更好的方法吗?
我的应用程序是用 C 语言编写并在 RHEL 5 上运行的。
【问题讨论】:
-
为什么你的第三个线程不能告诉另一个线程他们必须停止?然后你只需要等待每个线程停止,并在它们终止后清理资源。这看起来更像是资源共享问题而不是信号/退出问题
-
“t2”(第三方组件线程)收到
INT或TERM时会做什么?它会终止整个进程(如exit()),还是仅终止自身(pthread_exit())还是什么?
标签: c linux multithreading