PROCESS_SHARED/ROBUST属性pthread_mutex_t死锁而非返回EOWNERDEAD
共享内存中pthread_mutex未返回EOWNERDEAD的问题
我需要在共享内存(shm)中使用锁,因此采用了pthread_mutex_t对象。为支持进程间共享,且在持有锁的进程退出时可恢复,每个pthread_mutex_t的初始化代码如下:
pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED); pthread_mutexattr_setrobust(&attr, PTHREAD_MUTEX_ROBUST); pthread_mutex_init(&m_lock, &attr);
我通过以下步骤尝试触发pthread_mutex_lock返回EOWNERDEAD的场景:
- 启动一个进程,在共享内存中创建上述配置的
pthread_mutex_t; - 显式调用
pthread_mutex_lock获取该锁后退出进程; - 启动另一个进程,获取共享内存中的锁并调用
pthread_mutex_lock尝试加锁。
问题在于步骤3中出现了死锁,pthread_mutex_lock始终未返回。但根据pthread mutex文档,此场景下pthread_mutex_lock应返回EOWNERDEAD,表明持有锁的进程已退出。
测试环境:
- 系统:5.15.0-1033-aws Ubuntu 20.04 LTS
- g版本:g (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
内容的提问来源于stack exchange,提问作者FaceBro
相关产品推荐
相关产品推荐

