我在Linux上使用讀寫鎖,我發現試圖將讀鎖定對象升級到寫鎖死鎖。pthreads:讀寫器鎖,將讀鎖升級到寫鎖
即
// 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.
我讀過的手冊頁,它是非常具體的。
調用線程可能死鎖如果在 呼叫作出時其持有的 讀寫鎖(無論是讀或寫 鎖)。
在這些情況下將讀鎖升級到寫鎖的最佳方式是什麼?我不想在我保護的變量上引入競爭。
大概我可以創建另一個互斥體來包含釋放讀鎖和獲取寫鎖但我真的看不到使用讀/寫鎖。我不妨簡單地使用一個普通的互斥鎖。
THX
Boost.Thread具有UpgradeLockable概念,但如果您的代碼在pthread中已經非常深入,我懷疑這對您有多大用處。 – 2010-03-09 09:55:14
@Steve。你知道它是如何實施的嗎?它是否使用我正在考慮的獨立互斥體? 我想我可以下載它並檢查出來:o) – ScaryAardvark 2010-03-09 18:03:25
不,我不知道Boost.Thread是如何做到的,對不起。 – 2010-03-09 21:50:47