Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为什么不';Pthread互斥异步信号安全吗?_Linux_Synchronization_Pthreads_Mutex - Fatal编程技术网

Linux 为什么不';Pthread互斥异步信号安全吗?

Linux 为什么不';Pthread互斥异步信号安全吗?,linux,synchronization,pthreads,mutex,Linux,Synchronization,Pthreads,Mutex,Pthread互斥锁不是信号安全的。这意味着什么?这意味着您不能从信号处理程序内部执行任何涉及互斥体的操作。(从技术上讲,仅适用于异步信号,但所有同步信号都适用于“该指针不指向任何东西,我现在就要终止您的进程”这样的情况,所以这是没有意义的。)任何信号都可以通过提升()同步提升。当然,但是您是否见过一个程序依赖于能够做到这一点,然后在信号处理程序中使用非异步信号安全函数?这相当于一种昂贵的函数调用方式。您可以通过kill异步向线程/进程发送SIGSEGV。没有办法知道这件事。处理程序的sigin

Pthread互斥锁不是信号安全的。这意味着什么?

这意味着您不能从信号处理程序内部执行任何涉及互斥体的操作。(从技术上讲,仅适用于异步信号,但所有同步信号都适用于“该指针不指向任何东西,我现在就要终止您的进程”这样的情况,所以这是没有意义的。)

任何信号都可以通过
提升()
同步提升。当然,但是您是否见过一个程序依赖于能够做到这一点,然后在信号处理程序中使用非异步信号安全函数?这相当于一种昂贵的函数调用方式。您可以通过kill异步向线程/进程发送SIGSEGV。没有办法知道这件事。处理程序的siginfo\u t字段中的“si\u trapno”是不可实现的。@通过检查
si\u code
,您应该能够可靠地进行区分。一些系统对
si_-code
的分类比其他系统要复杂得多,但一般来说,对于
kill
发送的信号,
si_-QUEUE
设置的信号,它将是
si_-USER
(或者,如果该常数不是
,定义
d,零),以及内核生成的信号的其他一些非零值(当然可能是sync或async,取决于上下文)。但无论如何,我想不出在
SIGSEGV
处理程序中使用互斥锁的情况。我相信
SIGPIPE
将是同步的,因为它是为了响应在另一端关闭的情况下对已清空的管道执行
读取
(或
写入
)操作的尝试而产生的。