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

相关推荐
2601_957786771 天前
短视频矩阵系统的信号处理密码:用奈奎斯特采样定理破解“限流“黑箱
矩阵·音视频·信号处理
jz_ddk1 天前
[信号处理] 从匹配滤波到精确测距
信号处理·测距·rrc·码间串扰·扩频调制·isi
hhcgchpspk1 天前
Windows API线程学习
c语言·windows·学习·多线程·windows api
Tsuki_tl2 天前
【总结】Java的线程状态
java·后端·面试·多线程·并发编程·线程状态
WL_Aurora2 天前
Java多线程编程基础与实践
java·多线程
jiang_bluetooth3 天前
蓝牙典型射频架构剖析
蓝牙·信号处理·射频·pa·lna
阿昌喜欢吃黄桃3 天前
并发线程工具类分享
java·线程池·多线程·并发·juc
通信小呆呆4 天前
神经网络在通信与雷达领域:从信号处理到智能决策
人工智能·神经网络·信号处理
新新学长搞科研4 天前
【安徽大学主办】第五届半导体与电子技术国际研讨会(ISSET 2026)
大数据·数据库·人工智能·自动化·信号处理·半导体·电子
WL_Aurora5 天前
Java多线程详解(二):线程池、同步机制与并发工具类
java·多线程·并发