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

相关推荐
ytttr8738 小时前
EMD分解与希尔伯特变换能量谱分析
网络·信号处理
武藤一雄1 天前
C# 万字拆解线程间通讯?
后端·微软·c#·.net·.netcore·多线程
q27551300421 天前
PL27A1对拷线搭配 PTCB818A 设计资料 高速跨系统互传+键鼠共享一缆搞定
经验分享·单片机·嵌入式硬件·硬件架构·信号处理
Wnq100721 天前
鸿蒙 OS 与 CORBA+DDS+QOS+SOA 在工业控制领域的核心技术对比研究
物联网·性能优化·wpf·代理模式·信号处理·harmonyos·嵌入式实时数据库
Evand J1 天前
【信号处理课题推荐】小波变化:原理、演进与时频分析应用,MATLAB代码示例
算法·matlab·信号处理·傅里叶分析·傅立叶分析·小波变化
萧曵 丶2 天前
CompletableFuture 实际场景使用案例
java·多线程·并发编程·高级开发
萧曵 丶2 天前
CompletableFuture 底层原理详解
java·jvm·多线程·并发编程
自然数e3 天前
c++多线程【基于锁的数据结构】
数据结构·c++·多线程
通信小呆呆3 天前
超越循环前缀限制的 OFDM-ISAC:迭代 SIC-DFT 原理解析
目标检测·信号处理·通信感知一体化
黑客思维者4 天前
Python 3.14(2025最新版)的核心语法特性分析
服务器·开发语言·python·多线程