多執行緒同步之讀者寫者問題

2022-01-22 18:48:26 字數 676 閱讀 5715

問題定義:

現有一塊共享記憶體,多個讀程序和多個寫程序。多個讀程序可以同時讀,但是當有乙個寫程序正在寫時,其他任何讀程序或寫程序都不能執行。

該問題有3種變種。第一種稱為「讀者優先」(readers-preference)。在此情況下,只要有程序在讀,寫程序就得等待。

實現如下:

#include #include 

#include

#define m 6 //

number of readers

#define n 2 //

number of writers

int readcount = 0; //

current number of readers

pthread_mutex_t mutex = pthread_mutex_initializer; //

用於互斥地修改readcount變數

pthread_mutex_t rw = pthread_mutex_initializer; //

用於讀、寫以及寫、寫之間的互斥

void* write(void *arg)

void* read(void *arg)

intmain()

這種情況下,容易造成寫者餓死現象。

多執行緒的讀者寫者問題

上面是讀者寫者問題示意圖,類似於生產者消費者問題的分析過程,首先來找找哪些是屬於 等待 情況。第一 寫者要等到沒有讀者時才能去寫檔案。第二 所有讀者要等待寫者完成寫檔案後才能去讀檔案。vc 控制台顏色設定 因此在這裡要加個互斥訪問,不然很有可能在寫者執行緒將控制台顏色設定還原之前,讀者執行緒就已經有...

多執行緒11 讀者寫者問題

秒殺多執行緒第十篇 生產者消費者問題 的生產者消費者問題一樣,讀者寫者也是乙個非常著名的同步問題。讀者寫者問題描述非常簡單,有乙個寫者很多讀者,多個讀者可以同時讀檔案,但寫者在寫檔案時不允許有讀者在讀檔案,同樣有讀者在讀檔案時寫者也不去能寫檔案。上面是讀者寫者問題示意圖,類似於生產者消費者問題的分析...

讀者寫者之模型 同步問題

今天介紹讀者寫者模型 讀多寫少的場景 場景描述 寫者負責再資源池中寫 讀者負責從資源池中讀資料 同一時間內不允許多個寫者進行寫,但允許多個讀者進行讀 當寫者和讀者都準備占用資源池時,寫者優先占用資源池 此問題描述的時寫者優先順序高的場景 建立模型 乙個交易場所 資源池 此處用乙個變數供讀者和寫者進行...