linux中向某个线程发送信号,若没有对该信号的处理函数,则会导致程序结束。
如下面的程序,创建一个线程,主线程向其发送一个信号,会导致程序立即结束
#include <stdio.h>
#include <pthread.h>
pthread_t t;
void* run(void* arg)
{
while(1)
{
printf("Hello\n");
}
}
main()
{
pthread_create(&t, 0, run, 0);
pthread_kill(t,34);
while(1);
}
这就要求利用pthread_kill 与 sigwait 通过等待信号来控制线程时应添加一个信号处理函数来实现对线程的控制
改进后的控制线程程序
#include <stdio.h>
#include <pthread.h>
#include <signal.h>
pthread_t t1, t2;
sigset_t sigs;
void handle(int s)
{
}
void* r1(void* arg)
{
int s;
while(1)
{
printf("1\n");
sigwait(&sigs, &s);
}
}
void* r2(void* arg)
{
while(1)
{
sleep(1);
printf("2\n");
pthread_kill(t1, 34);
}
}
main()
{
signal(34, handle);
sigemptyset(&sigs);
sigaddset(&sigs, 34);
pthread_create(&t1, 0, r1, 0);
pthread_create(&t2, 0, r2, 0);
while(1);
}部分效果

本文探讨了Linux环境下线程间通过信号进行交互的原理与实践,包括如何使用pthread_kill与sigwait控制线程,并强调了在不进行信号处理函数的情况下可能导致的程序异常终止。通过改进的程序示例,展示了如何正确地添加信号处理函数以实现对线程的有效控制。
605

被折叠的 条评论
为什么被折叠?



