假設此問題: 2方案中,A和B,A的1點的方法,M的M個處理,命名爲VAR 1個共享變量現在1作家,男讀者消耗相同的項目
A
main(){
int i, a[50];
for(i=0;i<50;i++)
var = a[i];
}
B
main(){
int i, b[50];
for(i=0;i<50;i++)
b[i] = var;
}
,什麼我需要做的是確保對於A中的每個循環,每個B進程讀取共享變量(一次!)並將其存儲在它們的數組中。所以最後,每個B進程都會在他們的b陣列中有一個a陣列的副本。 這是一個信號量問題,解決方案可能是僞代碼,所以語言無關緊要。
初始解決方案不工作: 我正在使用信號量B初始化爲0,並且每次A寫入某些內容時,我正在通過M增加B,並執行一次下降(A)。 在每個B循環的開始,我做一個向下(B)。然後在B的每個循環結束時,我檢查是否有M讀者已經讀取並存儲了var,如果他們有,我正在做(A)。
顯然上面讓一個單個B過程「消費」都被假定M使用,以通過M讀者傳播。 那麼我該如何 - 智能地 - 確保每個B只讀取一次每個變量?一組M個信號量(每個M都有一個信號量)可以完成這項工作,但這很可能不是該練習所要求的。
爲什麼不使用讀寫鎖? – fge
每個讀者對每個環路做單讀,我需要做的M上的讀者同樣的工作,而不是讓讀者一起工作 – Bimp