linux - 如果您在 pthread_mutex_wait 上阻塞的进程上发出信号(os 信号,而不是 pthread_mutex_unlock)会发生什么
问题描述
令我困惑的是,pthread_mutex_lock
它没有E_INTR
作为返回值。虽然pthread_cond_wait
可以被虚假唤醒并返回 0,但由于 while 循环和 Mesa 监视器语义,这不是问题。
所以如果一个进程被阻塞了pthread_mutex_lock
,你发送一个信号唤醒它,在信号处理程序执行后,会发生什么?是否有任何机制可以避免这种虚假唤醒?
解决方案
如果一个进程被pthread_mutex_lock阻塞了,你发送一个信号唤醒它,信号处理程序执行后会发生什么?
如果信号处理程序没有调用任何异步信号不安全操作,则在处理程序返回后,进程将继续等待互斥体。
如果信号处理程序确实调用了异步信号不安全操作(例如解锁互斥锁),则行为未定义:任何事情都可能发生,包括(但不限于)崩溃、永久阻塞、“正常”工作等等。
推荐阅读
- javascript - 在向 API 发出请求后,如何在从 Mobx 存储访问数据时修复页面的额外渲染?
- corda - HibernateException:在记录事务期间级联期间刷新是危险的
- wordpress - WordPress(元素)
- python - Python 多处理的管理器列表没有锁?
- linear-regression - 无效的语法 erroExpected 2D 数组,得到 1D 数组而不是线性回归
- bluetooth-lowenergy - Watch-Os 密码未出现
- spring - Eclipse Photon 4.8 Spring IDE 下载和安装问题
- java - toFile().listFiles() 上的 NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE
- google-bigquery - BigQuery 缓存导致的潜在问题
- php - 如何仅在域人员中进行标头身份验证请求?