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

相关推荐
egoist20232 天前
[linux仓库]信号快速认识[进程信号·壹]
linux·c语言·信号处理·信号·前后台进程
摇滚侠3 天前
Spring Boot中使用线程池来优化程序执行的效率!笔记01
java·spring boot·多线程
Zevalin爱灰灰3 天前
数字信号处理 第八章(多采样率数字信号处理)
信号处理
切糕师学AI4 天前
【多线程】无锁数据结构(Lock-Free Data Structures)是什么?
多线程·并发编程
通信小呆呆5 天前
FPGA 上的 OFDM 同步:从 S&C 到残差 CFO 的工程化实现
fpga开发·信号处理·同步·ofdm
国际学术会议-杨老师7 天前
2025年计算机网络与信号处理国际会议(CNSP 2025)
计算机网络·信号处理
菜鸟‍7 天前
【实验报告】华东理工大学随机信号处理实验报告
信号处理
青草地溪水旁7 天前
从“快递签收规则”看 sigaction:信号处理的“总开关”
linux·信号处理
Nᴏsᴛᴀʟɢɪᴀ念7 天前
多线程奇幻漂流:从单核到多核质变(一)
java·开发语言·jvm·多线程
Zevalin爱灰灰8 天前
数字信号处理 第二章(z变换与LSI系统频域分析)【下】
信号处理