在讀者-寫者問題中,只對共享資料進行讀取的程序為讀者程序,修改共享資料的程序稱為寫者程序。多個讀者可同時讀取共享資料而不會導致出現錯誤,但是任何時刻多個寫者程序不能同時修改資料,寫者程序和讀者程序也不能同時訪問共享資料。讀者-寫者問題的解決策略有不同的傾向。
需要用到的共享變數:
semaphore rw_mutex = 1; // 讀者與寫者互斥訪問共享資料的互斥訊號量
semaphore mutex = 1; // 多個讀者程序互斥修改當前讀者程序數量的訊號量
int read_count = 0; // 系統當前讀者程序數量
寫者程序結構
do while(true);
讀者程序結構
do while(true);
讀者優先有可能導致寫者程序產生飢餓現象,當系統中不斷出現讀者程序時,寫者程序始終無法進入臨界區。
需要用到的共享變數:
semaphore rw_mutex = 1; // 讀者與寫者互斥訪問共享資料的互斥訊號量
semaphore r_mutex = 1; // 互斥修改當前讀取檔案的程序數
semaphore w_mutex = 1; // 互斥修改當前修改檔案的程序數
int read_count = 0; // 系統當前讀者程序數量
int write_count = 0; // 系統當前寫者程序數量
寫者程序結構
do while(true);
讀者程序結構
do while(true);
寫者優先有可能導致讀者程序產生飢餓現象,當系統中不斷出現寫者程序時,讀者程序始終無法進入臨界區。
需要用到的共享變數:
semaphore rw_mutex = 1; // 讀者與寫者互斥訪問共享資料的互斥訊號量
semaphore r_mutex = 1; // 互斥修改當前讀取檔案的程序數
int read_count = 0; // 系統當前讀者程序數量
寫者程序結構
do while(true);
讀者程序結構
do while(true);
經典同步問題 讀者和寫者問題
讀者 寫者問題 讀者 寫者問題是互斥問題的乙個概括。一組併發的執行緒要訪問乙個共享的物件,例如乙個主存中的資料結構,或者是磁碟上的資料庫。有些執行緒唯讀物件,其他執行緒只修改物件。唯讀物件的執行緒叫做讀者,修改物件的線 程的物件叫做寫者。寫者必須擁有對物件的獨佔的訪問,而讀者可以和其他讀者共享物件。...
經典程序同步問題 讀者寫者問題
問題描述 有讀者和寫者兩組併發程序,共享乙個檔案,當兩個或以上的讀程序同時訪問共享資料時不會產生 但若某個寫程序和其他程序 讀程序或寫程序 同時訪問共享資料時則可能導致資料不一致的錯誤。因此要求 允許多個讀者可以同時對檔案執行讀操作 只允許乙個寫者往檔案中寫資訊 任一寫者在完成寫操作之前不允許其他讀...
經典程序同步問題 讀者寫者
讀者 寫者問題 問題描述 有讀者和寫者兩組併發程序,共享乙個檔案,當兩個或以上的讀程序同時訪問共享資料時不會產生 但是如果某個寫程序和其他程序 讀程序或寫程序 同時訪問共享資料時則可能導致資料不一致的錯誤。簡單來說,你可以乙個文件開啟好多,但是你不能邊讀邊寫。從上述來看,得滿足以下幾個要求。允許多個...