【发布时间】:2010-10-29 07:11:33
【问题描述】:
我正在编写一个程序,有一个主线程和一些工作线程,我想正确处理信号。我的问题如下:
主线程启动并进行所有分配
主线程设置一个 SIGINT 信号处理程序
主线程启动工作线程。工作线程不需要特殊清理,但是它们可以在系统调用或信号量上休眠。
收到SIGINT时,我的理解是只有一个线程接收。因此,如果线程在系统调用或信号量上处于休眠状态,它们将不会被唤醒,我将无法 pthread_join 我的工作线程并在我的主线程中进行所有必要的清理。
以下信号处理程序可以解决我的问题吗?
void term(int sig)
{
g_do_cleanup = 1;
pthread_kill(worker_1_id, some_other_signal);
...
pthread_kill(worker_2_id, some_other_signal);
}
我期望的是,在收到 SIGINT 后,所有线程都会收到另一个信号,退出阻塞调用,查看g_do_cleanup 标志并优雅退出。
欢迎任何关于如何正确执行此操作的评论或链接。
编辑: 我不是在寻找一种方法来唤醒在特定条件下等待的多个线程,所以我不认为 pthread_cond_signal 方法是我正在寻找的。我想要的是:
- 找到一种方法,使所有线程 在阻塞调用返回时阻塞 来自这些调用。
- 或者杀死除主线程之外的所有线程。
【问题讨论】:
标签: c linux multithreading pthreads posix