【发布时间】:2014-02-27 15:15:16
【问题描述】:
我在网上阅读了一些关于关键区域、进入协议和退出协议的示例,并且很难弄清楚。 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;
}
}
这个例子的入口协议、出口协议和临界区是什么? 至于临界区,是互斥、饿死还是会导致死锁?
【问题讨论】:
-
我在想如果入口协议是lock[tellerID] = true;退出协议为 lock[tellerID] = false;临界区 while (lock[1-tellerID] && turn == (1 - tellerID));?
-
首先,您提供的链接已经为您提供了答案,其次,如果您无法弄清楚为什么您展示的示例会导致死锁,我建议您阅读并发至少一点。第三,你复制错误的例子
private boolean lock = {true, true}应该是private boolean lock[] = {true, true} -
你为什么不通过你所问的所有术语的定义来改进你的问题,你对这些定义如何应用于问题的解释,你认为答案是什么,也许是一个实际的问题比如“我不明白这部分是什么意思,我在谷歌上找不到答案。”
-
当你说
and had a hard time figuring out.. 我的眼睛有点呆滞。你是不是连续玩了2天?还是 2 小时? -
顺便说一句,只有两个出纳员 ID,所以我能想到的情况实际上只有四种。如果你真的把它们写在纸上,你会很清楚地看到这个问题。我给你一个提示 - 入口协议并不都在一行中。
标签: java deadlock mutual-exclusion