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

相关推荐
再一次等风来20 小时前
声源定位算法5----SRP-PHAT(1)
算法·信号处理·srp
再一次等风来20 小时前
声源定位算法5----SRP-PHAT(2)
算法·信号处理·srp·声源定位·gcc-phat
JustMove0n1 天前
互联网大厂Java面试全流程问答及技术详解
java·jvm·redis·mybatis·dubbo·springboot·多线程
予枫的编程笔记2 天前
【面试专栏|Java并发编程】从Runnable到Callable,Java4种线程创建方式
java·多线程·thread·java面试·runnable·callable·java线程
竹一阁2 天前
《信号与系统》(7)|典型信号的分类与特性:从冲激、阶跃到 LFM 信号
信号处理·信号与系统
新新学长搞科研2 天前
【绿色能源方向会议】第五届绿色能源与电力系统国际学术会议(ICGEPS 2026)
人工智能·能源·信号处理·材料工程·电力·电气自动化·绿色能源
Thomas.Sir2 天前
深入剖析 Reactor 多线程模型
性能优化·reactor·多线程·proactor
山河君16 天前
四麦克风声源定位实战:基于 GCC-PHAT + 最小二乘法实现 DOA
算法·音视频·语音识别·信号处理·最小二乘法·tdoa
一只大袋鼠16 天前
并发编程(三):线程快照统计・grep+awk+sort+uniq 实战详解
java·开发语言·多线程·并发编程
Aaron158818 天前
RFSOC与ADRV9009、AD9026、AD9361技术指标及应用场景对比分析
人工智能·算法·fpga开发·硬件工程·信息与通信·信号处理·基带工程