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

相关推荐
courniche1 天前
CSMA/CA与CSMA/CD的区别
网络·网络协议·信息与通信·信号处理
niuTaylor1 天前
嵌入式工程师多线程编程(二)生产者-消费者模式
网络·多线程
FreakStudio3 天前
一文速通Python并行计算:06 Python多线程编程-基于队列进行通信
嵌入式·多线程·面向对象·并行计算·线程同步·电子diy
小镇青年达师傅3 天前
条件锁存在的意义:用生活中的例子秒懂线程间的"暗号系统"
linux·嵌入式·多线程·互斥锁·系统编程·条件锁
平和少年3 天前
相干光信号处理的一些基础知识
信号处理
小镇青年达师傅4 天前
System V信号量 vs. POSIX信号量:核心区别与选型指南
linux·嵌入式·多线程·系统编程
理想奋斗中4 天前
【并发编程 | 第五篇】探索ThreadLocal的原理
java·多线程·threadlocal·threadlocalmap
捷配datasheet5 天前
OP2177运算放大器:高性能模拟信号处理的关键元件
嵌入式硬件·信号处理
并不会7 天前
多线程案例-单例模式
java·学习·单例模式·单线程·多线程·重要知识
JINX的诅咒8 天前
CORDIC算法:三角函数的硬件加速革命——从数学原理到FPGA实现的超高效计算方案
算法·数学建模·fpga开发·架构·信号处理·硬件加速器