經典同步問題 讀者和寫者問題

2021-07-05 01:44:01 字數 1497 閱讀 3869

讀者--寫者問題

讀者--寫者問題是互斥問題的乙個概括。一組併發的執行緒要訪問乙個共享的物件,例如乙個主存中的資料結構,

或者是磁碟上的資料庫。有些執行緒唯讀物件,其他執行緒只修改物件。唯讀物件的執行緒叫做讀者,修改物件的線

程的物件叫做寫者。寫者必須擁有對物件的獨佔的訪問,而讀者可以和其他讀者共享物件。

按照讀者和寫者的優先順序分為兩類問題:

一、讀者優先

讀者優先,要求不要讀者等待,即使有寫者等待時,讀者也不需要等待。

**實現

#include#include#include#include#includesem_t    mutex,source;

int read_count = 0;//物件的讀者

int count = 0;

void *reader(void *argv)

return null;

}void *writer(void *argv)

return null;

}int main(int argc,char **argv)//./a.out readers writers

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

pthread_create(&tid1,null,writer,null);

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

pthread_create(&tid2,null,reader,null);

while(1)

sleep(5);

return 0;

}

二、寫者優先

寫者優先,要求一旦寫著準備好寫,它就會盡快的完成它寫的操作,乙個在寫者後達到讀者必須等待。

**實現

#include#include#include#include#includesem_t    mutex,source,queue;//queue用來排隊

int read_count = 0;//物件的讀者

int count = 0;

void *reader(void *argv)

return null;

}void *writer(void *argv)

return null;

}int main(int argc,char **argv)//./a.out readers writers

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

pthread_create(&tid1,null,writer,null);

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

pthread_create(&tid2,null,reader,null);

while(1)

sleep(5);

return 0;

}

經典同步問題 讀者 寫者問題

在讀者 寫者問題中,只對共享資料進行讀取的程序為讀者程序,修改共享資料的程序稱為寫者程序。多個讀者可同時讀取共享資料而不會導致出現錯誤,但是任何時刻多個寫者程序不能同時修改資料,寫者程序和讀者程序也不能同時訪問共享資料。讀者 寫者問題的解決策略有不同的傾向。需要用到的共享變數 semaphore r...

經典程序同步問題 讀者寫者問題

問題描述 有讀者和寫者兩組併發程序,共享乙個檔案,當兩個或以上的讀程序同時訪問共享資料時不會產生 但若某個寫程序和其他程序 讀程序或寫程序 同時訪問共享資料時則可能導致資料不一致的錯誤。因此要求 允許多個讀者可以同時對檔案執行讀操作 只允許乙個寫者往檔案中寫資訊 任一寫者在完成寫操作之前不允許其他讀...

經典程序同步問題 讀者寫者

讀者 寫者問題 問題描述 有讀者和寫者兩組併發程序,共享乙個檔案,當兩個或以上的讀程序同時訪問共享資料時不會產生 但是如果某個寫程序和其他程序 讀程序或寫程序 同時訪問共享資料時則可能導致資料不一致的錯誤。簡單來說,你可以乙個文件開啟好多,但是你不能邊讀邊寫。從上述來看,得滿足以下幾個要求。允許多個...