【问题标题】:POSIX multithreading and signal dispositionPOSIX 多线程和信号处理
【发布时间】:2015-01-17 07:31:32
【问题描述】:

这是我的代码:

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 上运行此代码时,似乎总是将信号传递到主线程线。有谁知道问题出在哪里?

【问题讨论】:

标签: c multithreading unix signals posix


【解决方案1】:

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

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

所以你唯一应该考虑的是任何线程都可能接收到信号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-04
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多