是否可以在没有争用条件的情况下在写锁定和读锁定状态之间切换pthread_rwlock



如果我有一个线程首先操作数据结构,因此上面有一个 pthread 写锁,我是否可以让该线程将锁更改为读锁状态,而不会产生可能允许另一个线程在切换期间的某个时刻获取写锁的争用条件?

不幸的是,据我所知,pthreads 标准不允许在 pthread_rwlock_t 上从写入器锁"降级"到读取器锁。 某些 pthreads 实现可能允许扩展,让您在不释放锁的情况下从持有写入器锁过渡到持有读取器锁,但这超出了 pthreads 的 SuS/POSIX 规范的范围。 而且我不认为最常见的情况,Linux/glibc pthreads实现,允许此操作。

所以对你的问题的简短回答是"不"。 您需要在 pthread_mutex_t/pthread_cond_t 之上实现自己的读取器/写入器锁,以获得所需的行为。

最新更新