免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2095 | 回复: 0
打印 上一主题 下一主题

[故障求助] 请教高人 AIX上C++线程问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-20 15:14 |只看该作者 |倒序浏览
我在AIX5.3上有个程序,主进程有一个线程,线程中屏蔽了ctrl+c信号,问题出现在,如果我主进程中sleep一段时间,主进程可以被ctrl+c信号停掉,但是如果主进程内没有sleep,主进程也不能被ctrl+c信号停止。请哪位高人指教一下,万分感谢啊


程序如下:
#include <pthread.h>
#include <unistd.h>
#include <signal.h>

void Wait ()
{
    pthread_mutex_t mutex;
    pthread_mutex_init(&mutex, 0);
    pthread_mutex_lock(&mutex);

    pthread_cond_t cond;
    pthread_cond_init(&cond, 0);
    pthread_cond_wait(&cond, &mutex);
}

extern "C" void* ThreadRun(void* arg)
{
    sigset_t mask;
    sigemptyset(&mask);
    sigaddset(&mask, SIGINT);
    pthread_sigmask(SIG_BLOCK, &mask, MULL);
    Wait();
    return 0;
}

int main()
{
    pthread_attr_t attr;
    pthread_attr_init(&attr);
    pthread_t threadId;
    pthread_create(&threadId, &attr, ThreadRun, NULL);

    sleep(1);  // 问题就出自这里,此时主进程sleep一秒,主进程可以被ctrl+c停住,
               // 但是,如果注释掉本行,即主进程中没有sleep,那么主进程不能被ctrl+c停掉
    Wait();

    return 0;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP