线程与信号

多线程环境下,对信号的处理变得更加复杂,因为同一个进程的每一个子线程都可以收到信号, 并且共享信号处理函数。所以此时要定义一个专门的线程来进行信号的处理。

主要有以下两个步骤:

1,在主线程创建第一个线程之前就调用sigpromask函数的的pthread版本:pthread_sigmask进行信号的屏蔽(屏蔽那些你想要收到并处理的信号, 这样非信号处理线程就不会收到这些信号了)。int pthread_sigmask(int how, const sigset_t *newmask, sigset_t *oldmask),成功时返回0。

2, 在信号处理线程中调用int sigwait(const sigset_t &set, int *sig)函数,成功时返回0。输入的set即是第一步中的信号掩码, 表示等待所有被屏蔽的信号,并且将收到的信号存储在sig中。此时不应该定义信号处理函数,因为信号到来时,sigwait和信号处理函数只有一个能起作用。直接根据sig的值进行相应的信号处理即可。

参考于《Linux高性能服务器编程》游双

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值