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

相关推荐
MARIN_shen5 小时前
Marin说PCB之电容物料的替换经验总计--03
嵌入式硬件·硬件工程·信号处理·pcb工艺
MARIN_shen5 小时前
Marin说PCB之电容物料的替换经验总计--01
单片机·嵌入式硬件·硬件工程·信号处理·pcb工艺
XINVRY-FPGA8 小时前
EP4CE30F23I7N Altera Cyclone IV E SRAM FPGA
嵌入式硬件·fpga开发·云计算·硬件工程·信息与通信·信号处理·fpga
network_tester1 天前
IXIA XM2网络测试仪电源模块损坏维修方法详解
网络·网络协议·tcp/ip·http·https·信息与通信·信号处理
易天ETU1 天前
FEC 功能与 DSP 芯片的关联性:解码信号处理高效协同核心
网络·信号处理·fec技术·800g光模块
BestOrNothing_20151 天前
C++ 并发四件套:并发编程 / 原子性 / 数据竞争 / 内存模型 (全解析)
c++·多线程·并发编程·线程安全·内存模型·原子操作·数据竞争
【建模先锋】1 天前
高效对抗噪声!基于深度残差收缩网络(DRSN)的轴承故障诊断模型
网络·深度学习·信号处理·轴承故障诊断·降噪模型
北京青翼科技1 天前
【TES818 】基于 VU13P FPGA+ZYNQ SOC 的 8 路 100G 光纤通道处理平台
图像处理·人工智能·fpga开发·信号处理·智能硬件
MARIN_shen2 天前
Marin说PCB之LPDDR5的仿真报告分析--02
嵌入式硬件·硬件工程·信号处理·pcb工艺
7澄13 天前
Java Socket 网络编程实战:从基础通信到线程池优化
java·服务器·网络·网络编程·socket·多线程·客户端