让我困惑的是pthread_mutex_lock没有E_INTR作为返回值。尽管由于while循环和Mesa监视器语义,pthread_cond_wait可能会被虚假唤醒并返回0,但这不是问题。
那么,如果一个进程被pthread_mutex_lock阻塞,并且您发送一个信号来唤醒它,那么在信号处理程序被执行之后,会发生什么呢?有什么机制可以避免这种虚假的唤醒吗?
发布于 2020-03-19 11:03:34
如果一个进程被pthread_mutex_lock阻塞,你发送一个信号来唤醒它,在信号处理程序被执行之后,会发生什么?
如果信号处理程序没有调用任何异步信号不安全操作,那么在处理程序返回之后,进程将继续等待互斥锁。
如果信号处理程序确实调用了异步信号不安全操作(例如,解锁互斥锁),则行为是未定义的:任何事情都可能发生,包括(但不限于)崩溃、永远阻塞、出现“正常”工作等。
https://stackoverflow.com/questions/60749687
复制相似问题