Linux 如果在pthread\u mutex\u wait上阻塞的进程上发送信号(操作系统信号,而不是pthread\u mutex\u unlock),会发生什么情况

Linux 如果在pthread\u mutex\u wait上阻塞的进程上发送信号(操作系统信号,而不是pthread\u mutex\u unlock),会发生什么情况,linux,unix,pthreads,signals,posix,Linux,Unix,Pthreads,Signals,Posix,让我困惑的是pthread\u mutex\u lock没有E\u INTR作为返回值。尽管pthread_cond_wait可能是虚假唤醒并返回0,但由于while循环和Mesa监视器语义,这不是问题 所以,如果一个进程被pthread\u mutex\u lock阻塞,并且您发送一个信号来唤醒它,那么在执行信号处理程序之后,会发生什么?有没有什么机制可以避免这种虚假的唤醒 如果一个进程被pthread_mutex_lock阻塞,并且您发送一个信号来唤醒它,那么在执行信号处理程序之后,会发生什

让我困惑的是
pthread\u mutex\u lock
没有
E\u INTR
作为返回值。尽管
pthread_cond_wait
可能是虚假唤醒并返回0,但由于while循环和Mesa监视器语义,这不是问题

所以,如果一个进程被
pthread\u mutex\u lock
阻塞,并且您发送一个信号来唤醒它,那么在执行信号处理程序之后,会发生什么?有没有什么机制可以避免这种虚假的唤醒

如果一个进程被pthread_mutex_lock阻塞,并且您发送一个信号来唤醒它,那么在执行信号处理程序之后,会发生什么

如果信号处理程序没有调用任何异步信号不安全操作,那么在处理程序返回后,进程将继续等待互斥体


如果信号处理程序确实调用了异步信号不安全操作(例如,解锁互斥锁),则行为未定义:任何情况都可能发生,包括(但不限于)崩溃、永久阻塞、出现“正常工作”等。

刚刚编写了测试程序。似乎pthread库开发人员可以处理这个问题。不像
pthread\u cond\u wait
公开
E\u INTR
pthread\u mutex\u lock
在内部处理这个问题。奇怪的是为什么
pthread\u mutex\u lock
没有标记为可重入安全函数?