调用pthread_rwlock_rdlock后执行pthread_rwlock_wrlock未返回EDEADLK的问题咨询
调用pthread_rwlock_rdlock后执行pthread_rwlock_wrlock未返回EDEADLK的问题咨询
各位好,我最近碰到了一个关于POSIX读写锁的疑惑,想过来请教下大家!
我查过Open Group的文档,里面明确说pthread_rwlock_wrlock()和pthread_rwlock_trywrlock()这两个函数,在当前线程已经持有该读写锁的读锁或者写锁时,可能会返回[EDEADLK]错误码,文档里的这段说明是这样的:
NAME
pthread_rwlock_wrlock, pthread_rwlock_trywrlock - lock a read-write lock object for writing
...
The pthread_rwlock_wrlock() and pthread_rwlock_trywrlock() functions may fail if:
...
[EDEADLK] The current thread already owns the read-write lock for writing or reading.
但我实际写代码测试的时候,却发现了和文档描述不一致的情况:当我的线程先调用pthread_rwlock_rdlock()拿到了读锁,之后再调用pthread_rwlock_wrlock()尝试获取写锁时,程序并没有返回EDEADLK错误,反而直接阻塞住了,完全没触发预期的错误。
有没有大佬能帮我分析下这是怎么回事呀?是我对文档里的描述理解错了,还是不同系统的读写锁实现有差异?或者是我的测试代码哪里有问题?
备注:内容来源于stack exchange,提问作者hyunseo welcome
相关产品推荐
相关产品推荐

