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

相关推荐
小的~~1 小时前
Java线程及线程池的相关的问题
java·开发语言·多线程
fengxin_rou2 小时前
Java并发手撕题详解:原理、实现与面试避坑指南
多线程·cas·juc·lru
IT利刃出鞘1 天前
Java多线程--三种写法(Thread、Runnable、Callable)
java·多线程
MC皮蛋侠客2 天前
C++17 多线程系列(十):多线程性能优化——从测量到调优
c++·多线程
network_tester2 天前
TSN台架系统测试:从实验室验证到智能驾驶落地的关键桥梁
网络·网络协议·5g·汽车·信息与通信·信号处理·tcpdump
【建模先锋】2 天前
强噪声故障诊断新思路!从频域降噪到故障分类:FusADFaultClassifier 自适应谱降噪分类模型详解
人工智能·深度学习·分类·数据挖掘·信号处理·故障诊断·降噪算法
lqqjuly3 天前
信号处理:频域分析、数字滤波与谱估计
信号处理
yong99903 天前
基于MATLAB的雷达数字信号处理
开发语言·matlab·信号处理
MC皮蛋侠客4 天前
C++17 多线程系列(五):C++17 并行算法——从串行到并行的零成本迁移
c++·多线程
zxsd_xyz4 天前
LabVIEW寄存器教程
信息可视化·信号处理·labview·寄存器