讀者寫者模型

2021-08-21 02:19:52 字數 1621 閱讀 7878

讀者寫者模型

對於一塊公共資源來說,讀取的頻率比較高,但是寫的頻率很低.

通常而言,在讀的過程中,往往伴隨著查詢的操作,中間消耗著大量的時長,如果給這種**加鎖,就會極大的降低我們的效率.

所以在讀的時候是不需要加鎖的,大家共享公共資源,但是不會修改,那麼就不存在資料讀錯的問題.

但是當有人要寫這個資料的時候,我們就必須要加鎖,為了避免有讀者讀取到的資料不是當前修改過的資料.讀寫鎖就是為了解決這樣的問題的.

這裡指一塊公共資源

讀者 - 只讀取資料,不對資料進行修改

寫者 - 會修改資料內容

讀者 & 讀者 -> 共享

寫者 & 寫者 -> 互斥

讀者 & 寫者 - > 同步互斥

讀寫鎖介面

初始化

pthread_rwlock_init (pthread_rwlock_t * restrict  rwlock,

const pthread_rwlockattr_t * restrict 

attr);

引數:rwlock : 讀寫鎖

attr : null

銷毀

int pthread_rwlock_destroy(pthread_rwlock_t* rwlock);

加鎖和解鎖

int pthread_rwlock_rdlock(pthread_rwlock_t* rwlock);  // 加讀鎖

int pthread_rwlock_wrlock(pthread_rwlock_t* rwlock); // 加寫鎖

int pthread_rwlock_unlock(pthread_rwlock_t* rwlock); // 解鎖

**演示讀者寫者模型

#include

#include

#include

pthread_rwlock_t rwlock; // 建立乙個讀寫鎖

// 1. 一種場景

//    這裡使用一全域性變數

int count = 0;

// 2. 兩種角色

// 3. 三種關係

void* read(void* arg)

return null;

} void* write(void* arg)

return null;

} int main()

for(i = 0; i < 2; ++i)

; sprintf(buf,"writer %d",i);

pthread_create(&writer[i],null,write,null);

} for(i = 0; i < 4; ++i)

pthread_join(reader[i],null);

} pthread_rwlock_destroy(&rwlock);

return 0;

} 結果演示:

讀者寫者模型

一 讀者寫者模型 讀者 唯讀資料區中的資料 寫者 只往資料區中寫資料 要求 1 允許多個讀者同時執行讀操作 2 不允許讀者 寫者同時操作 3 不允許多個寫者同時操作。我們知道在一些程式中存在讀者寫者問題,就是對某些資源的訪問會存在兩種可能的情況 一種就是寫操作,寫操作是可以獨佔資源的,也就是具有排他...

讀者 寫者模型

一.讀者 寫者模型 我們知道在一些程式中存在讀者寫者問題,就是對某些資源的訪問會存在兩種可能的情況 一種就是寫操作,寫操作是可以獨佔資源的,也就是具有排他性 另一種情況就是讀操作,在讀操作中可以有多個資源併發的去訪問某種資源,它的訪問方式是共享的。一般由於寫端操作次數少,讀端操作次數多,因此寫端的優...

Linux 讀者寫者模型

前面我們已經學過了生產者消費者模型,那本文就來介紹乙個與它有些相似卻又不同的讀者寫者模型。乙個資料檔案或記錄可以被多個程序共享,我們把只要求讀檔案的程序稱為reader程序,其他程序則被稱為write程序。允許多個程序同時讀乙個共享物件,但是不允許乙個write程序和其他reader程序或write...