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后子线程退出,然后主线程也退出的啊
...全文
589 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
初一公主奶爸 2013-11-25
  • 打赏
  • 举报
回复
引用 6 楼 jasonsungblog 的回复:
好的,谢谢各位的指点!!!
可以结贴了
进行中 2013-11-25
  • 打赏
  • 举报
回复
好的,谢谢各位的指点!!!
初一公主奶爸 2013-11-24
  • 打赏
  • 举报
回复
还有,你要是需要直接退出线程的话可以用pthread_exit
初一公主奶爸 2013-11-24
  • 打赏
  • 举报
回复
或者将while(1)改为while(running),然后在switch里修改running为0
初一公主奶爸 2013-11-24
  • 打赏
  • 举报
回复
引用 2 楼 jasonsungblog 的回复:
谢谢大神指点,请问如果这里要退出while(1),怎么实现呢?用switch能不能实现。
用goto
进行中 2013-11-24
  • 打赏
  • 举报
回复
谢谢大神指点,请问如果这里要退出while(1),怎么实现呢?用switch能不能实现。
Carl_CCC 2013-11-24
  • 打赏
  • 举报
回复
你的break只能退出switch不能退出while(1) 所以子线程永远都不会退出。

23,215

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧