【问题标题】:Why aren't Pthread Mutexes async-signal-safe?为什么 Pthread Mutexes 不是异步信号安全的?
【发布时间】:2012-07-19 04:20:31
【问题描述】:

Pthread 互斥锁不是异步信号安全的。这是什么意思?

【问题讨论】:

    标签: linux synchronization pthreads mutex


    【解决方案1】:

    这意味着您不能从信号处理程序内部做任何涉及互斥锁的事情。 (从技术上讲,仅适用于 异步 信号,但所有 同步 信号都适用于“那个指针不指向任何东西,我现在要杀死你的进程” “所以它没有实际意义。)

    【讨论】:

    • 任何信号都可以与raise()同步引发。
    • 当然,但是你有没有见过一个依赖于能够做到这一点然后在信号处理程序中使用非异步信号安全函数的程序?这相当于进行函数调用的昂贵方式。
    • 您可以通过异步方式将 SIGSEGV 发送到线程/进程。没有办法找到它。处理程序的 siginfo_t 字段中的 'si_trapno' 不真实。
    • @Lothar 您应该能够通过检查si_code 可靠地区分。一些系统对si_code 的分类比其他系统更精细,但一般来说,对于kill、@ 987654327@(如果定义了该常量)用于sigqueue 设置的信号,以及内核生成的信号的其他一些非零值(当然可能是同步或异步,取决于上下文)。但是无论如何,我想在SIGSEGV处理程序中使用互斥锁的情况感到茫然。
    • 我相信SIGPIPE 将是同步的,因为它是为了响应尝试在另一端清空的管道上执行read(或write)操作而引发的关闭。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    相关资源
    最近更新 更多