繁体   English   中英

POSIX多线程和信号配置

[英]POSIX multithreading and signal disposition

这是我的代码:

void handler(int sig)
{
    printf("%lu recv signal\n", pthread_self());
}

void* thread_fun(void *threadid)
{

   printf("thread %lu created\n", pthread_self());
   while(1){
      sleep(1);
}
return NULL;
}

int main(void)
{
    struct sigaction act;
    act.sa_handler = handler;
    sigemptyset(&act.sa_mask);
    act.sa_flags = 0;
    sigaction(SIGINT, &act, NULL);

    printf("thread %lu created\n", pthread_self());
    pthread_t t1,t2;
    pthread_create(&t1, NULL, thread_fun, NULL);
    pthread_create(&t2, NULL, thread_fun, NULL);

    while(1)
        sleep(1);
    return 0;
}

APUE表示在多线程进程中,像SIGINT这样的信号将被传递到随机线程中,但是,当我在Ubuntu 14.04上运行此代码时,似乎信号总是被传递到主线程。 有谁知道这是什么问题?

“随机线程”并不意味着它被传递给随机选择的线程,但它可以传递给实现者想要的任何线程。 所以随机选择是可能的,但任何其他选择都是可能的。 在您的系统上,选择是:如果可能,首先是主线程。

您可以阅读OpenGroup Signal Concepts文档 没有“随机”的选择。 据说,在所有线程中,将选择一个不阻塞信号或等待信号的线程。

因此,您应该考虑的唯一事情是可能任何线程都可以接收信号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM