[問題] 關於保護critical section的問題
最近在實作 Bakery's Algorithm來保護critical section
以下是我寫的Bakery Algorithm副程式
int Choosing[4] = {0}, Number[4] = {0};/*global variable*/
/*Lock*/
void Bakery(int i){
int j, Max = 0;
Choosing[i] = 1;
for(j = 0; j < 4; j++){
if(Number[j] > Max)
Max = Number[j];
}
Number[i] = Max + 1;
Choosing[i] = 0;
for(j = 0; j < 4; j++){
while(Choosing[j]); /*不好意思PO版時打錯*/
while((Number[j] != 0) &&
((Number[j] < Number[i]) || ((Number[j] == Number[i]) && (j < i))));
}
}
/*Unlock*/
void Unlock(int i){
Number[i] = 0;
}
總共有4條threads
不知道為什麼還是會有兩條不同的threads同時通過Bakery這個
副程式進入critical section而造成race condition?
謝謝大家
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.124.105.193
※ 編輯: allrain 來自: 122.124.105.193 (04/13 21:47)
推
04/14 02:18, , 1F
04/14 02:18, 1F
推
04/14 11:25, , 2F
04/14 11:25, 2F
※ 編輯: allrain 來自: 140.112.30.32 (04/14 15:24)
→
04/14 15:35, , 3F
04/14 15:35, 3F
推
04/14 17:47, , 4F
04/14 17:47, 4F
推
04/14 23:20, , 5F
04/14 23:20, 5F
→
04/14 23:21, , 6F
04/14 23:21, 6F
→
04/15 13:26, , 7F
04/15 13:26, 7F
→
04/15 13:26, , 8F
04/15 13:26, 8F
推
04/15 14:57, , 9F
04/15 14:57, 9F
→
04/15 14:58, , 10F
04/15 14:58, 10F
→
04/15 16:24, , 11F
04/15 16:24, 11F
→
04/15 16:25, , 12F
04/15 16:25, 12F
→
04/15 21:09, , 13F
04/15 21:09, 13F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章