Linux中pthread_join等待无法返回
进行中 2013-11-24 03:51:59 #include <stdio.h>
#include <pthread.h>
#include <signal.h>
#include <unistd.h>
pthread_t ntid;
sigset_t set;
void *child_thread(void *p)
{
int signum;
while(1)
{
sigwait(&set, &signum);
switch(signum)
{
case SIGUSR1:
printf("pthread running.\n");
continue;
case SIGUSR2:
printf("sleep 2s quit.\n");
sleep(1);
break;
default:
printf("no symbol..\n");
}
}
sigdelset(&set, SIGUSR2);
}
int main()
{
int retu;
char tmpc;
void *status;
sigemptyset(&set);
sigaddset(&set, SIGUSR1);
sigaddset(&set, SIGUSR2);
sigprocmask(SIG_SETMASK,&set,NULL);
retu = pthread_create(&ntid, NULL, child_thread, NULL);
if(retu < 0)
{
printf("create thread fail,rerurn.\n");
return -1;
}
while(1)
{
printf("Please input a char.\n");
scanf("%c",&tmpc);
switch(tmpc)
{
case 'a':
pthread_kill(ntid, SIGUSR1);
continue;
case 'q':
pthread_kill(ntid, SIGUSR2);
pthread_join(ntid,&status);
printf("finish\n");
break;
default:
printf("unknown symbol..\n");
}
}
return 0;
}
上面的程序,如果输入q,主线程无法退出,一直在等待,本来是在子线程sleep 1s后子线程退出,然后主线程也退出的啊