七、讀寫鎖

01. 讀寫鎖概述
當有一個線程已經持有互斥鎖時,互斥鎖將所有試圖進入臨界區的線程都阻塞住。但是考慮一種情形,當前持有互斥鎖的線程只是要讀訪問共享資源,而同時有其它幾個線程也想讀取這個共享資源,但是由於互斥鎖的排它性,所有其它線程都無法獲取鎖,也就無法讀訪問共享資源了,但是實際上多個線程同時讀訪問共享資源並不會導致問題。

在對數據的讀寫操作中,更多的是讀操作,寫操作較少,例如對數據庫數據的讀寫應用。爲了滿足當前能夠允許多個讀出,但只允許一個寫入的需求,線程提供了讀寫鎖來實現。

讀寫鎖的特點如下:

1)如果有其它線程讀數據,則允許其它線程執行讀操作,但不允許寫操作。

2)如果有其它線程寫數據,則其它線程都不允許讀、寫操作。

讀寫鎖分爲讀鎖和寫鎖,規則如下:

1)如果某線程申請了讀鎖,其它線程可以再申請讀鎖,但不能申請寫鎖。

2)如果某線程申請了寫鎖,其它線程不能申請讀鎖,也不能申請寫鎖。

POSIX 定義的讀寫鎖的數據類型是: pthread_rwlock_t。

02. 讀寫鎖函數
2.1 讀寫鎖初始化

2.2 讀寫鎖銷燬

2.3 申請讀鎖

2.4 申請寫鎖

2.5 釋放讀寫鎖

03. 讀寫鎖應用示例 

下面是一個使用讀寫鎖來實現 4 個線程讀寫一段數據是實例。在此示例程序中,共創建了 4 個線程,其中兩個線程用來寫入數據,兩個線程用來讀取數據。當某個線程讀操作時,其他線程允許讀操作,卻不允許寫操作;當某個線程寫操作時,其它線程都不允許讀或寫操作。


測試結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章