【发布时间】:2010-12-11 18:38:54
【问题描述】:
我有一个主线程,它保留在主函数中,即我没有像在 pthread_create 中那样专门创建它,因为它不是必需的。该线程打开一个文件,然后创建其他线程,等待它们完成工作(即进行连接),清理所有内容(指针、信号量、条件变量等......)。
现在,我必须应用此代码来阻止 SIGINT:
sigset_t set;
int sig;
sigemptyset(&set);
sigaddset(&set, SIGINT);
pthread_sigmask(SIG_BLOCK, &set, NULL);
while (1) {
sigwait(&set, &sig);
switch (sig) {
case SIGINT:
/* handle interrupts */
break;
default:
/* unexpected signal */
pthread_exit((void *)-1);
}
}
它说您必须使用 main() 函数来启动 N+1 个线程并等待它们完成。如果 SIGINT 信号到达程序,它应该由主线程处理,以便以干净的方式关闭程序及其线程
我的疑问是我应该如何放置这段代码?把它放在 main() 创建的后台线程上是错误的吗?因为我已经有一个带有退出标志的 cicle,它创建并加入所有其他线程,所以我不明白这段代码是否完全转到所有完成/调用以启动程序的 main 函数。如果我把它放在一个线程上,用这段代码和要清理的处理程序,这是否被认为是忙等待?
【问题讨论】:
标签: c multithreading thread-safety pthreads signals