今天介紹讀者寫者模型(讀多寫少的場景)
場景描述:
寫者負責再資源池中寫
讀者負責從資源池中讀資料
同一時間內不允許多個寫者進行寫,但允許多個讀者進行讀
當寫者和讀者都準備占用資源池時,寫者優先占用資源池(此問題描述的時寫者優先順序高的場景)
建立模型
乙個交易場所(資源池),此處用乙個變數供讀者和寫者進行讀寫
兩種角色,一組讀者執行緒和一組寫者執行緒
三種關係:
.讀者和寫者之間為互斥關係,寫者優先順序高
.讀者和讀者之間為共享關係(沒有互斥關係)
.寫者和寫者之間為互斥關係
**實現
這裡採用poxi執行緒庫中的讀寫鎖來實現
#include
#include
#include
//讀者寫者模型(讀的頻率高,寫的頻率低)
//讀者和讀者之間關係為 共享
//寫者和寫者之間關係為 互斥
//讀者和寫者之間關係為 同步互斥關係
//讀寫鎖
//讀者加讀鎖(讀者之間共享)
//寫者加寫鎖(寫者之間互斥)
//寫者優先獲取鎖(寫者優先順序高)
pthread_rwlock_t rw_lock;//定義乙個讀寫鎖
//*******實現乙個交易場所********************
int count;
//***********實現三種關係**********************
//實現寫著
void * write(void * arg)
return
null;
}//實現讀者
void * read(void * arg)
return
null;
}//******************兩種角色*******************
void test()
//建立讀者執行緒
for(i=0;i2;i++)
//等待執行緒結束
for(i=0;inull);
} pthread_rwlock_destroy(&rw_lock);//銷毀讀寫鎖
}int main()
結果展示:
我們看到寫者之間是互斥的(每次寫入的值都不同)
讀者之間是共享的(可以讀出相同的值)
多執行緒同步之讀者寫者問題
問題定義 現有一塊共享記憶體,多個讀程序和多個寫程序。多個讀程序可以同時讀,但是當有乙個寫程序正在寫時,其他任何讀程序或寫程序都不能執行。該問題有3種變種。第一種稱為 讀者優先 readers preference 在此情況下,只要有程序在讀,寫程序就得等待。實現如下 include include...
讀者寫者模型
一 讀者寫者模型 讀者 唯讀資料區中的資料 寫者 只往資料區中寫資料 要求 1 允許多個讀者同時執行讀操作 2 不允許讀者 寫者同時操作 3 不允許多個寫者同時操作。我們知道在一些程式中存在讀者寫者問題,就是對某些資源的訪問會存在兩種可能的情況 一種就是寫操作,寫操作是可以獨佔資源的,也就是具有排他...
讀者 寫者模型
一.讀者 寫者模型 我們知道在一些程式中存在讀者寫者問題,就是對某些資源的訪問會存在兩種可能的情況 一種就是寫操作,寫操作是可以獨佔資源的,也就是具有排他性 另一種情況就是讀操作,在讀操作中可以有多個資源併發的去訪問某種資源,它的訪問方式是共享的。一般由於寫端操作次數少,讀端操作次數多,因此寫端的優...