Linux讀寫鎖的使用

2021-10-24 02:30:49 字數 2159 閱讀 9538

目錄

1. 讀寫鎖介紹

2. 讀寫鎖的操作函式

3. 讀寫鎖示例**

讀寫鎖的型別可以分為讀鎖和寫鎖,以讀方式給資料加鎖—讀鎖。以寫方式給資料加鎖—寫鎖。但是讀寫鎖是一把鎖,每個執行緒只可以帶乙個鎖型別。

特性:(舉例說明)

1. 執行緒a加讀鎖成功,又來了三個執行緒,做讀操作,三個執行緒再次加鎖成功。

———結論:讀時共享,並行處理

2.執行緒a加寫鎖成功,又來了三個執行緒,做讀操作,三個執行緒再次加鎖失敗。

———結論:寫時獨佔

3.執行緒a加鎖成功,又來了執行緒b加寫鎖阻塞,又來了c執行緒加讀鎖阻塞。

———結論:(1)讀寫不能同時進行,(2)寫的優先順序高

舉例:執行緒a持寫鎖,b請求讀鎖,c請求寫鎖。

b,c執行緒先阻塞;a解鎖後,c加寫鎖成功,b繼續阻塞;c解鎖後,b加鎖成功。

讀寫鎖的過程和互斥鎖類似,不作詳細介紹,由特性可知,相較於互斥鎖而言,當讀執行緒多的時候,可以提高訪問效率。適合使用在讀操作的次數遠大於寫操作的時候,讀寫鎖的相關函式如下:

主要操作函式:

1. 建立讀寫鎖

pthread_rwlock_t rwlock;

2. 初始化讀寫鎖

int pthread_rwlock_init(

pthread_rwlock_t *restrict rwlock,

const pthread_rwlockattr_t *restrict attr

);3. 加讀鎖

int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);

阻塞:之前對這邊鎖加寫鎖操作時阻塞

4. 嘗試加讀鎖,try

int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);

5. 加寫鎖

int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);

阻塞:上一次加讀鎖和寫鎖任意一種,沒有解鎖都會阻塞。

6. 嘗試加寫鎖

int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);

7. 解鎖

int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);

8.銷毀

int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);

以上函式都是成功返回0,失敗返回錯誤號。

/* 3

個執行緒不定時"寫

" 全域性資源,

5個執行緒不定時"讀

" 同一全域性資源

*/

#include #include #include #include #include #include #include // 全域性變數

int number;

pthread_rwlock_t rwlock;

void* write_func(void* arg)

return null;}

void* read_func(void* arg)

return null;}

int main(int argc, const char* ar**)

//建立5個讀執行緒

for(int i=3; i<8; ++i)

// **子執行緒的pcb

for(int i=0; i<8; ++i)

//釋放讀寫鎖資源

pthread_rwlock_destroy(&rwlock);

return 0;

}

執行結果:一直迴圈下去。

Linux讀寫鎖使用

讀寫鎖很早就知道了,但是使用的不多,這次 中出現了,才認真思考怎麼用。摘錄一下 讀寫鎖的特點是 當讀寫鎖是寫加鎖時,在這個鎖被解鎖之前,所有試圖對這個鎖加鎖的執行緒都會被阻塞。當讀寫鎖是讀加鎖時,在這個鎖被解鎖之前,所有試圖以讀模式對他進行加鎖的執行緒都可以得到訪問權,但是如果執行緒以寫模式對此鎖加...

讀寫鎖pthread rwlock t的使用

讀寫鎖是用來解決讀者寫者問題的,讀操作可以共享,寫操作是排他的,讀可以有多個在讀,寫只有唯一個在寫,同時寫的時候不允許讀。具有強讀者同步和強寫者同步兩種形式 強讀者同步 當寫者沒有進行寫操作,讀者就可以訪問 強寫者同步 當所有寫者都寫完之後,才能進行讀操作,讀者需要最新的資訊,一些事實性較高的系統可...

讀寫鎖pthread rwlock t的使用

本文 讀寫鎖是用來解決讀者寫者問題的,讀操作可以共享,寫操作是排他的,讀可以有多個在讀,寫只有唯一個在寫,同時寫的時候不允許讀。具有強讀者同步和強寫者同步兩種形式 強讀者同步 當寫者沒有進行寫操作,讀者就可以訪問 強寫者同步 當所有寫者都寫完之後,才能進行讀操作,讀者需要最新的資訊,一些事實性較高的...