博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【APUE】线程与信号
阅读量:4356 次
发布时间:2019-06-07

本文共 843 字,大约阅读时间需要 2 分钟。

每个线程都有自己的信号屏蔽字,但是信号的处理是进程中所有线程共享的。进程中的信号是递送到单个线程的。

线程中pthread_sigmask函数类似与进程的sigprocmask函数,可以用来阻塞信号。

#include <signal.h>

int pthread_sigmask(int how,const sigset_t *set,sigset_t *obset);

线程可以通过调用sigwait等待一个或多个信号发生。

#include <signal.h>

int sigwait(const sigset_t *set,int *signop);

set参数指出了线程等待的信号集,signop表明等到的是哪个信号

线程在调用sigwait之前,必须阻塞那些它正在等待的信号,sigwait函数会自动取消信号集的阻塞状态。在返回之前,sigwait将恢复线程的信号屏蔽字。如果信号在sigwait调用的时候没有被阻塞,在完成对sigwait调用之前会出现一个时间窗,在这个窗口期,某个信号可能在线程完成sigwait调用之前就被递送了。

如果多个线程在sigwait调用时,等待的是同一个信号,这时就会出现线程阻塞,当信号递送的时候,只有一个线程可以从sigwait中返回。

要把信号发送到进程,可以调用kill,要把信号发送到线程,可以调用pthread_kill

#include <signal.h>

int pthread_kill(pthread_t thread,int signo);

可以传一个0值的signo来检查线程是否存在。如果信号的默认处理动作是终止该进程,那么把信号传递给某个线程仍然会杀死整个进程。

注意闹钟定时器是进程资源,所有线程共享相同的alarm,所以进程中的多个线程不可能互不干扰的使用alarm。

转载于:https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/3851286.html

你可能感兴趣的文章
Excel VBA 基本概念
查看>>
testlink的那些坑
查看>>
2019-04-17 快速备份存储过程
查看>>
PAT A1115 Counting Nodes in a BST (30 分)——二叉搜索树,层序遍历或者dfs
查看>>
汤姆叔叔的小屋
查看>>
第二周 1 时间换算(5分)
查看>>
定义label标签宽度需要设置display:inline-block;
查看>>
OUC_Summer Training_ DIV2_#2之解题策略 715
查看>>
Centos6.8搭建Git服务(git版本可选)(转)
查看>>
转载:Linux下用mutt给QQ邮箱发匿名邮件
查看>>
[模版]平衡树splay2
查看>>
sed匹配多行并替换其中的内容
查看>>
android中数据库的介绍及实例
查看>>
Windows Phone 8 锁屏背景与通知
查看>>
制作 alipay-sdk-java包到本地仓库
查看>>
CODEVS——T 2956 排队问题
查看>>
BZOJ 1797 最小割(最小割割边唯一性判定)
查看>>
BZOJ 1818 内部白点(离散化+树状数组)
查看>>
Math对象及相关方法
查看>>
Nginx负载均衡(架构之路)
查看>>