我有一个启动5个线程的应用程序。
启动这些线程后,main()中没有任何反应。
main(){
`start thread 1..5
}
如何在main()中无限循环,以便我的程序将持续运行,直到它获得信号。
我不想使用
while(true)
因为它会占用CPU周期。 (我认为)
编辑: 我正在使用gcc 4 线程Api:pthread 操作系统:Linux
答案 0 :(得分:4)
最简单的是:
while (true) sleep(1000);
最好的是 join()所有五个帖子。
答案 1 :(得分:3)
sigsuspend()
函数就是为了这个目的而设计的 - 它将挂起调用线程,直到它收到一个导致调用信号处理程序的信号。
为避免竞争条件(信号在您的进程调用sigsuspend()
之前到达),您应该阻止信号,检查信号,然后将掩码传递给sigsuspend()
解除阻塞:< / p>
/* Block SIGUSR1 */
sigset_t sigusr1set, origset;
sigemptyset(&sigusr1set);
sigaddset(&sigusr1set, SIGUSR1);
sigprocmask(SIG_BLOCK, &sigusr1set, &origset);
/* Set up threads etc here */
/* Unblock SIGUSR1 and wait */
sigdelset(&origset, SIGUSR1);
sigsuspend(&origset);
答案 2 :(得分:1)
加入这些主题,请参阅pthread_join。
答案 3 :(得分:1)
您可以尝试Boost::Synchronization功能,如下所示:
main(){
`start thread 1..5
wait for signal
exit
}
答案 4 :(得分:1)