讀者--寫者問題
讀者--寫者問題是互斥問題的乙個概括。一組併發的執行緒要訪問乙個共享的物件,例如乙個主存中的資料結構,
或者是磁碟上的資料庫。有些執行緒唯讀物件,其他執行緒只修改物件。唯讀物件的執行緒叫做讀者,修改物件的線
程的物件叫做寫者。寫者必須擁有對物件的獨佔的訪問,而讀者可以和其他讀者共享物件。
按照讀者和寫者的優先順序分為兩類問題:
一、讀者優先
讀者優先,要求不要讀者等待,即使有寫者等待時,讀者也不需要等待。
**實現
#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...
經典程序同步問題 讀者寫者問題
問題描述 有讀者和寫者兩組併發程序,共享乙個檔案,當兩個或以上的讀程序同時訪問共享資料時不會產生 但若某個寫程序和其他程序 讀程序或寫程序 同時訪問共享資料時則可能導致資料不一致的錯誤。因此要求 允許多個讀者可以同時對檔案執行讀操作 只允許乙個寫者往檔案中寫資訊 任一寫者在完成寫操作之前不允許其他讀...
經典程序同步問題 讀者寫者
讀者 寫者問題 問題描述 有讀者和寫者兩組併發程序,共享乙個檔案,當兩個或以上的讀程序同時訪問共享資料時不會產生 但是如果某個寫程序和其他程序 讀程序或寫程序 同時訪問共享資料時則可能導致資料不一致的錯誤。簡單來說,你可以乙個文件開啟好多,但是你不能邊讀邊寫。從上述來看,得滿足以下幾個要求。允許多個...