多线程与信号
来源:互联网 发布:淘宝退货官方寄快递 编辑:程序博客网 时间:2024/06/06 01:33
参考地址:
https://www.cnblogs.com/coding-my-life/p/4782529.html(很大帮助)
http://blog.csdn.net/zhangfulin_hwatop/article/details/8567490
https://www.cnblogs.com/clover-toeic/p/4126594.html
类UNIX信号以前是专为进程设计的,它比线程的出现早了很多年。当线程模型出现后,专家们试图也在线程上实现信号,这导致了一个问题:如果要在线程模型中保持原来在进程中信号语意不变,是相当困难的。
避免信号和线程一起使用是明智的选择。但是,将他们分开又是不可能或不实际的。只要有可能的话,仅仅在主线程内使用pthread_sigmask()来屏蔽信号,然后 同步地 在专用线程中使用sigwait()来处理信号。——即异步产生的信号用同步的方式处理:为了防止信号中断线程,可以把信号加到每个线程的屏蔽字中,再在专门的线程中处理信号(即1、)。
进程中的信号发送方式有:
- 如果是异常产生的信号(比如程序错误,像SIGPIPE、SIGEGV这些),则只有产生异常的线程收到并处理。
- 如果是用pthread_kill产生的内部信号,则只有pthread_kill参数中指定的目标线程(同一进程内)收到并处理。
- 如果是外部使用kill命令产生的信号,通常是SIGINT、SIGHUP等job control信号,则会遍历所有线程,直到找到一个不阻塞该信号的线程,然后调用它来处理。(一般从主线程找起),注意只有一个线程能收到。
1、第3种信号发送下决定信号发送到哪个线程
主线程阻塞SIGINT,其他子线程都初始继承主线程屏蔽字,即初始也阻塞SIGINT,因此可以通过下面两种方式达成:
- 在需要接受该信号的线程sigwait() 放入“等待信号集”即可;#include <signal.h> int sigwait(const sigset_t * restrict set, int* restrict signop);
- 在线程内的屏蔽字上解阻塞掉该信号即可。#include <signal.h> int pthread_sigmask(int how, const sigset_t *restrict set, sigset_t *restrict oset);
阅读全文
0 0
- Linux多线程与信号
- Linux多线程与信号
- Linux多线程与信号
- 100-多线程与信号
- 多线程与信号
- linux 多线程与信号pthread_kill
- 多线程中的信号与槽
- Linux下信号处理与多线程程序
- Linux下信号处理与多线程程序
- QT 多线程信号与槽(一)
- QT 多线程信号与槽(二)
- QT 多线程信号与槽(三)
- QT 多线程信号与槽(一)
- QT 多线程信号与槽(二)
- QT 多线程信号与槽(三)
- Linux 多线程编程 与 信号处理
- QT中的信号-槽函数与多线程
- 101-多线程与信号(sigwait)
- Spring MVC 使用SQL进行模糊查询
- 酷科技 | 智能冰敷头带
- 小蓝单车倒闭了?盘点共享单车众生相:跑路、罢免CEO、卖公司……
- Linux netstat命令详解
- 理解get和post的区别
- 多线程与信号
- 源码分析参考:Connection
- 技术分享连载(四十七)
- webapi跨域
- centos7 install google chrome explorer
- 如何使用TestFlight进行App构建版本测试
- 深入理解C语言的指针*和引用&
- JavaScript操作JSON总结
- javaScript for循环保存json值被覆盖问题