我在Linux上使用读/写锁,发现尝试将一个已经被读锁定的对象升级为写锁定会导致死锁。
即:
// acquire the read lock in thread 1.
pthread_rwlock_rdlock( &lock );
// make a decision to upgrade the lock in threads 1.
pthread_rwlock_wrlock( &lock ); // this deadlocks as already hold read lock.
我已阅读了man页,它非常具体。
如果调用线程在调用时持有读写锁(无论是读锁还是写锁),则可能会发生死锁。
在这种情况下,最佳的方式是如何将读锁升级为写锁。 我不想在保护变量时引入竞态条件。
我可以创建另一个互斥锁来包含释放读锁和获取写锁的过程,但是这样做似乎没有使用读写锁的意义。 我可能还不如只使用一个普通的互斥锁。
谢谢。