首页 > 解决方案 > 如果您在 pthread_mutex_wait 上阻塞的进程上发出信号(os 信号,而不是 pthread_mutex_unlock)会发生什么

问题描述

令我困惑的是,pthread_mutex_lock它没有E_INTR作为返回值。虽然pthread_cond_wait可以被虚假唤醒并返回 0,但由于 while 循环和 Mesa 监视器语义,这不是问题。

所以如果一个进程被阻塞了pthread_mutex_lock,你发送一个信号唤醒它,在信号处理程序执行后,会发生什么?是否有任何机制可以避免这种虚假唤醒?

标签: linuxunixpthreadssignalsposix

解决方案


如果一个进程被pthread_mutex_lock阻塞了,你发送一个信号唤醒它,信号处理程序执行后会发生什么?

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

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


推荐阅读