天天看點

OpenThreads庫介紹——ReadWriteMutex

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