我正在编写一个程序,带有主线程和一些工作线程,并且我希望获得信号处理权限。我的问题是这样的:主/从线程和信号处理
主线程启动并完成所有分配
主线程设置一个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方法是我正在寻找。我要的是:
- 找到一种方法,所有的线程是 阻塞阻塞调用返回从这些调用 。
- 或者杀死除主要的所有线程外的所有线程。
是的。大多数人使用pthread或Win32/MFC实现线程 – Kieveli 2009-05-27 16:47:02
不,我不认为这是好的,因为它不会将我从阻塞选择呼叫或sem_wait呼叫唤醒。 也许我可以用pthread_condition替换我的信号量,但信号量抽象真的适合我的同步模型。 – shodanex 2009-05-28 08:12:09