1. 讀寫鎖簡介
OpenThreads庫中的ReadWriteMutex是一種讀寫鎖,讀寫鎖是計算機程式的并發控制的一種同步機制,也稱“共享-互斥鎖”、多讀者-單寫者鎖。多讀者鎖,用于解決讀寫問題。讀操作可并發重入,寫操作是互斥的。簡單來說就是允許多個線程同時讀取資源,但是一旦要修改資源(寫操作),那麼所有讀的線程都必須被阻塞,直到寫的線程完成修改。
2. 類型
讀寫鎖可以根據實際的需要采用不同的政策,主要包括:
(1)更高的讀取優先級(read-preferring)
(2)更高的寫入優先級(write-preferring)
(3)未定義優先級(unspecified-priority-RW)
3. 實作
OpenThreads采用的實作是Raynal的一種實作,實作的僞代碼如下:(使用兩個Mutex和一個計數器)
- Begin Read
Lock r.
Increment b.
If b = 1, lock g.
Unlock r.
- End Read
Lock r.
Decrement b.
If b = 0, unlock g.
Unlock r.
- Begin Write
Lock g.
- End Write
Unlock g.
OpenThread采用的這種政策是read-preferring,也就是讀取優先級更高。這種政策有一個劣勢,就是寫入資料的線程會一直等待所有的讀取線程結束後才能寫入。如果讀取的公共資源很多,可能會造成write-starvation。
4. 參考資料:
1. 死鎖,活鎖,餓死,阻塞的了解
2. Readers–writer lock