クリティカル リージョン、エントリ プロトコル、およびエグジット プロトコルに関するいくつかの例をオンラインで読んでいましたが、理解するのに苦労しました。 http://pages.cs.wisc.edu/~dusseau/Classes/CS537-S01/SampleQuizzes/sol2.html
class BankAccount {
private int turn = 0;
private boolean lock = {true, true};
private int balance;
private int accountNumber;
BankAccount(int acct) {
accountNumber = acct;
balance = 0;
}
// tellerID is either 0 or 1
public void deposit(int amount, int tellerID) {
lock[tellerID] = true;
turn = 1 - tellerID;
while (lock[1-tellerID] && turn == (1 - tellerID));
balance += amount;
lock[tellerID] = false;
}
}
この例の入口プロトコル、出口プロトコル、および重要な領域は何ですか? 臨界領域については、相互排除、飢餓、またはデッドロックになりますか?