讀者寫者模型
對於一塊公共資源來說,讀取的頻率比較高,但是寫的頻率很低.
通常而言,在讀的過程中,往往伴隨著查詢的操作,中間消耗著大量的時長,如果給這種**加鎖,就會極大的降低我們的效率.
所以在讀的時候是不需要加鎖的,大家共享公共資源,但是不會修改,那麼就不存在資料讀錯的問題.
但是當有人要寫這個資料的時候,我們就必須要加鎖,為了避免有讀者讀取到的資料不是當前修改過的資料.讀寫鎖就是為了解決這樣的問題的.
這裡指一塊公共資源
讀者 - 只讀取資料,不對資料進行修改
寫者 - 會修改資料內容
讀者 & 讀者 -> 共享
寫者 & 寫者 -> 互斥
讀者 & 寫者 - > 同步互斥
讀寫鎖介面
初始化
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...