【问题标题】:How does a program handle an interruption with several threads and signals?程序如何处理多个线程和信号的中断?
【发布时间】:2021-03-04 20:39:30
【问题描述】:

想象一下,我有一个程序,它有一个创建多个线程的 main 函数。在每个线程中,我通过signal(SIGINT, functionA)CTRL + C 中断(SIGINT)重定向到functionA,并在主进程中将相同的中断重定向到functionBsignal(SIGINT, functionB)。

当程序运行并发送中断SIGINT时,程序会做什么? 它会在所有线程中执行functionA,然后在主进程中执行functionB

【问题讨论】:

  • Strictly speaking: "在多线程程序中使用这个函数会导致未定义的行为。"

标签: c linux multithreading signals


【解决方案1】:

信号处理程序操作(SIG_IGN、SIG_DFL 或处理程序函数)是每个进程的属性,而不是每个线程的属性。

这意味着如果说不同的线程使用sigaction()来设置相同的信号动作,那么最后一个获胜。

此外,如果您有多个线程不阻塞信号,内核只需选择一个(基本上是随机的)用于传递信号。也就是说,它只传递一次,而不是每个线程一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-21
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 2011-11-18
    相关资源
    最近更新 更多