software-based
two process (load, store)
不能被interrupted
share two variables
int turn; //表示哪個process進入critical section
Boolean flag[2]; //表示是否有process進入critical section
這個演算法正確的條件:
Mutual exclusion is preserved
Progress requirement is satisfied
Bounded-waiting requirement is met
Pi enters its critical section only if either flag[j]==false or turn==i
do{
flag[i]=true; //自己想進入
turn = j; //將優先權先給對方
while (flag[j] && turn==j) ;
//當對方想進入且優先權在對方手上時,則自己在while中空轉,而一旦對方不想進入或是對方把優先權讓回來時,自己能立刻進入
<critical section>
flag[i]=flase; //表示自己剛離開,沒有意願再進入
<remainder section>
}while(true)
當對方進入一次又想再進入,會把優先權讓給自己
Priority: inheritance protocol
留言列表