多线程下的signal信号处理

多线程中,信号在哪个线程中处理是不确定的,可能被任意一个线程处理

下边的代码可以验证该结论,多次Ctrl+c,会被不同的线程捕获此信号,并处理,最终每个线程死锁,阻塞在等待锁的状态

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <pthread.h>
#include <unistd.h>
pthread_mutex_t lock;
// 信号处理函数
void sigint_handler(int signum) {
    printf("Received SIGINT signal, %ld\n",pthread_self());
	printf("lock line %d\n",__LINE__);
	pthread_mutex_lock(&lock);
	//usleep(100);
	pthread_mutex_unlock(&lock);
	printf("unlock line %d\n",__LINE__);
}

// 线程函数
void* thread_func(void* arg) {
    while (1) { 
		printf("thread process, %ld\n",pthread_self());
		usleep(100000);
    }
    return NULL;
}

int main() {
    signal(SIGINT, sigint_handler);  // 注册SIGINT信号的处理函数
	printf("main process, %ld\n",pthread_self());
    pthread_t thread1, thread2;
    pthread_create(&thread1, NULL, thread_func, NULL);  // 创建一个新线程
	pthread_create(&thread2, NULL, thread_func, NULL);  // 创建一个新线程
	while(1)
	{
		printf("lock line %d\n",__LINE__);		
		pthread_mutex_lock(&lock);
        usleep(100000);
		pthread_mutex_unlock(&lock);
		printf("unlock line %d\n",__LINE__);
	
	}
    pthread_join(thread1, NULL);  // 等待新线程退出
	pthread_join(thread2, NULL);  // 等待新线程退出
    return 0;
}

Linux多线程信号处理浅谈_linux信号处理函数在哪个线程_hdxbw-wq的博客-CSDN博客

相关推荐
arong_xu14 小时前
现代C++锁介绍
c++·多线程·mutex
一只嵌入式爱好者1 天前
高速信号处理中的预加重、去加重和均衡
信号处理
西岸行者1 天前
捋一捋相关性运算,以及DTD和NLP中的应用
人工智能·算法·自然语言处理·信号处理
埃菲尔铁塔_CV算法3 天前
新型滤波算法在信号处理中的创新与应用
算法·信号处理
计算机科研之友(Friend)5 天前
海外招聘丨埃因霍温科技大学—安全人工智能自动机器学习博士后
图像处理·人工智能·科技·机器学习·信号处理
一个通信老学姐7 天前
专业125+总分400+南京理工大学818考研经验南理工电子信息与通信工程,真题,大纲,参考书。
考研·信息与通信·信号处理·1024程序员节
山河君7 天前
音频进阶学习八——傅里叶变换的介绍
学习·算法·音视频·信号处理
孤独的追光者7 天前
序列傅里叶变换的性质|时移特性
信号处理·数字信号处理·傅里叶变换·频域分析
Anin蓝天(北京太速科技-陈)8 天前
211-基于FMC的1路1.5G ADC 1路 2.5G DAC子卡
嵌入式硬件·5g·fpga开发·信号处理
搬砖的小码农_Sky9 天前
数字信号处理:FIR滤波器
信号处理