多线程下的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博客

相关推荐
2501_909800819 小时前
Java多线程
java·开发语言·多线程
爱学大树锯3 天前
【快刷面试】-数据库-多线程在数据库中的应用
数据库·面试·多线程
oura3 天前
log2查找表的核心设计思路
信息与通信·信号处理
linux_shuishou3 天前
WLAN 物理层信号处理
信号处理·wlan·11ax·11be·11bn
极度畅想3 天前
脑电模型实战系列(四):基于GAN和CGAN的脑电情绪识别 DEAP EEG, PyTorch 纯 GAN 实战:生成 DEAP EEG 特征向量(二)
信号处理·脑机接口·bceloss·deap数据集·gan模型设计·pca可视化
小萌新上大分4 天前
java线程通信 生产者消费者,synchronized,,ReentrantLock,Condition(笔记备份)
java·多线程·lock·java线程间通信的方式·reentrantlock使用·生产者消费者问题java·java多线程与高并发
竹一阁5 天前
跟踪导论(十二)——卡尔曼滤波的启动:初始参数的设置
算法·信号处理·雷达·信号与系统
lkbhua莱克瓦245 天前
多线程综合练习3
java·开发语言·多线程·githup
不穿格子的程序员5 天前
Redis篇9——Redis深度剖析:
数据库·redis·多线程·事务回滚·ap·cp
race condition6 天前
UNIX网络编程笔记 信号处理
笔记·unix·信号处理