讀者寫者之模型 同步問題

2021-08-20 19:34:28 字數 1297 閱讀 1920

今天介紹讀者寫者模型(讀多寫少的場景)

場景描述:

寫者負責再資源池中寫

讀者負責從資源池中讀資料

同一時間內不允許多個寫者進行寫,但允許多個讀者進行讀

當寫者和讀者都準備占用資源池時,寫者優先占用資源池(此問題描述的時寫者優先順序高的場景)

建立模型

乙個交易場所(資源池),此處用乙個變數供讀者和寫者進行讀寫

兩種角色,一組讀者執行緒和一組寫者執行緒

三種關係:

.讀者和寫者之間為互斥關係,寫者優先順序高

.讀者和讀者之間為共享關係(沒有互斥關係)

.寫者和寫者之間為互斥關係

**實現

這裡採用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 不允許多個寫者同時操作。我們知道在一些程式中存在讀者寫者問題,就是對某些資源的訪問會存在兩種可能的情況 一種就是寫操作,寫操作是可以獨佔資源的,也就是具有排他...

讀者 寫者模型

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