为了账号安全,请及时绑定邮箱和手机立即绑定

POSIX线程和信号

POSIX线程和信号

C
aluckdog 2019-11-08 14:27:51
我一直在试图了解如何POSIX线程和POSIX信号相互作用的复杂性。我特别感兴趣:控制信号传递到哪个线程的最佳方法是什么(假设它首先不会致命)?告诉另一个线程(实际上可能很忙)信号到达的最佳方法是什么?(我已经知道,使用信号处理程序中的pthread条件变量是一个坏主意。)如何安全处理将发生信号的信息传递给其他线程?这是否需要在信号处理程序中发生?(我通常不希望杀死其他线程;我需要一种更巧妙的方法。)作为我为什么要这样做的参考,我正在研究如何将TclX包转换为支持线程,或者将其拆分并至少使一些有用的部件支持线程。信号是那些特别令人感兴趣的部分之一。
查看完整描述

3 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

根据POSIX标准,所有线程在系统上应以相同的PID出现,并且使用pthread_sigmask()可以为每个线程定义信号阻止掩码。


由于只允许为每个PID定义一个信号处理程序,因此我更喜欢在一个线程中处理所有信号,并pthread_cancel()在需要取消正在运行的线程时发送。这是首选方法,pthread_kill()因为它允许为线程定义清理功能。


在某些较旧的系统上,由于缺少适当的内核支持,正在运行的线程可能具有与父线程的PID不同的PID。有关在Linux 2.4上使用linuxThreads处理信号的信息,请参见常见问题解答。


查看完整回答
反对 回复 2019-11-08
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

到目前为止,我在哪里:

  • 信号来自不同的主要类别,其中一些通常通常应该终止进程(SIGILL),而某些则永远不需要做任何事情(SIGIO;更容易直接进行异步IO)。这两个类无需采取任何措施。

  • 有些信号不需要立即处理。像SIGWINCH这样的东西可以排队直到方便为止(就像X11中的事件一样)。

  • 棘手的是那些您想通过中断正在执行的操作来对它们做出响应,而又不会消灭线程的程度。特别是,在交互模式下的SIGINT应该使事物响应。

我还有需要整理signalVS sigactionpselectsigwaitsigaltstack,和一大堆其他位和POSIX(和非POSIX)API的作品。


查看完整回答
反对 回复 2019-11-08
  • 3 回答
  • 0 关注
  • 453 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号