【问题标题】:Status of threads when signal handler runs信号处理程序运行时的线程状态
【发布时间】:2010-11-12 19:14:15
【问题描述】:

假设一个多线程应用程序,其中定义了一个信号处理程序。

现在,如果将信号传递给 PROCESS,并调用信号处理程序 - 我怀疑在信号处理程序运行期间其他线程会发生什么。他们是否继续运行,就好像什么都没发生一样,或者他们在这段时间内被暂停......或......?

如果有人能告诉我为什么要证明答案是正确的?

【问题讨论】:

    标签: multithreading signals


    【解决方案1】:

    specification 非常清楚信号和线程如何交互:

    为进程生成的信号应准确地传送到进程中正在调用选择该信号的 sigwait() 函数或没有阻止信号传送的线程之一。

    由于信号仅传递给一个线程,其他线程不受影响(并继续运行)。

    【讨论】:

      【解决方案2】:

      线程是独立的:从一个线程到第二个线程的信号不会影响任何其他线程。为什么是因为他们是独立的。它会影响其他线程的唯一原因是相关线程的信号处理程序是否以某种方式与其他线程交互。

      【讨论】:

      • 谢谢。我认为我的问题陈述不够清楚。假设信号被传递给进程,而不是任何特定线程。答案还是一样吗?
      • IIRC(虽然我可能错了)进程的外部信号将被发送到所有线程,因此您需要为需要响应信号的所有线程设置处理程序或设置忽略状态忽略信号。所有具有忽略的线程将继续正常运行,而任何具有处理程序的线程将开始处理信号。
      • AFAIK,信号是过程特定的实体。如果将信号传递给进程,要执行信号处理程序中的代码,它将需要一个线程——现在哪个线程应该执行信号处理程序——这种线程的选择是任意的且未指定。所以在我从许多其他人中选择了一个之后,所有其他人都应该被暂停..不是吗?你说什么?
      猜你喜欢
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-16
      • 2012-01-24
      • 2011-11-18
      • 2021-12-21
      • 1970-01-01
      相关资源
      最近更新 更多