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

相关推荐
Da Da 泓16 小时前
[项目] --- 基于websocket的网页五子棋(可多用户)
网络·websocket·网络协议·多线程·项目
搞科研的小刘选手21 小时前
【见刊检索快 | 重庆线上线下同步】第五届信号处理、计算机网络与通信国际学术会议(SPCNC 2026)
计算机网络·信号处理·通信·学术会议·会议推荐·重庆
闻缺陷则喜何志丹1 天前
【C++特性及类库】多线程
开发语言·c++·多线程·语言特性·系统库
星夜离尘562 天前
MATLAB 采样混叠实验 20 Hz 和 80 Hz 为什么会得到相同数据
matlab·数据采集·信号处理·采样定理·混叠
lisw052 天前
当生物阻抗遇上生物力学:EIM技术实现肌肉状态精准感知
驱动开发·信号处理
搞科研的小刘选手4 天前
【IEEE出版 | 西安石油大学+中海油服主办 | 北京举办】第八届智能控制、测量与信号处理国际学术会议(ICMSP 2026)
信号处理·测量·智能控制·学术会议·北京·会议推荐
会议咨询4 天前
2026年智能检测、信号处理与大数据国际会议(ISPBD 2026)
大数据·信号处理·智能检测
慧都小项4 天前
SimPCB Lite 1.1:过孔也能做频域分析了
信号处理·pcb工艺·过孔·simpcb lite·s 参数
YFJ_mily5 天前
11.10最终投稿截止|SPIC2026第四届信号处理与智能计算|连续两届EI&Scopus双检索 IEEE官方收录
人工智能·信号处理·智能计算·rdlink研发家·往届会议历史·沈阳理工大学主办·广东工业大学主办
Doker 多克6 天前
ForkJoinPool 详解
java·多线程