我很難理解和實現Peterson的N個進程算法(也稱爲Filter算法)。我正在嘗試使用共享內存在C中進行聊天。我使用的是可以在Wikipedia中發現的算法的版本:在聊天中實現Peterson的算法
// initialization
level[N] = { -1 }; // current level of processes 0...N-1
waiting[N-1] = { -1 }; // the waiting process of each level 0...N-2
// code for process #i
for(l = 0; l < N-1; ++l) {
level[i] = l;
waiting[l] = i;
while(waiting[l] == i && (there exists k ≠ i, such that level[k] ≥ l)) {
// busy wait
}
}
// critical section
level[i] = -1; // exit section
我有一個程序叫server.c和另一個叫client.c,我打算用算法,以便每個客戶端都可以訪問共享內存在自己的輪迴。
據我所知,我的算法實現應該在每個客戶端內運行。我的問題是:如果每個客戶端都是程序client.c的不同實例,我怎麼知道正在運行的客戶端的數量(N的值)?另外,如果每個client.c的新實例都不知道有多少實例已經運行過,我怎麼知道i的值(我會是進程的數量)?
如果我的問題不清楚,請讓我知道,因爲英語不是我的母語。
非常感謝!
這些結構被認爲是在共享內存中,所以這不適用於單獨的程序實例,除非您將控制變量所在的區域標記爲共享。但是,一旦你這樣做,你可以有一個計數器,告訴你有多少併發用戶。 –
非常感謝您的回答。實際上,我正在爲我的控制變量使用共享內存區域的一部分(我現在正在開發,所以我不知道它是否工作)。我很擔心,因爲控制變量可以在給定的時間被兩個或更多不同的用戶同時訪問 - 這正是算法試圖解決的問題。因此,爲了使用該算法知道如何訪問共享內存區域,我需要知道共享內存區域中的n的值,並反之亦然:... S –