gpt4 book ai didi

c - POSIX 多线程和信号处理

转载 作者:太空宇宙 更新时间:2023-11-04 02:00:21 25 4
gpt4 key购买 nike

这是我的代码:

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 document .没有“随机”的选择。据说在所有线程中会选择一个不阻塞信号或正在等待信号的线程。

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

关于c - POSIX 多线程和信号处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27997289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com