BankAccount 送金の古典的な問題の同期コードを作成しようとしました。今、私は解決策の問題を理解しようとしています。Web で見つけたどのソリューションでも、転送方法で 2 つのロックが使用されていましたが、私は使用しませんでした。
class BankAccount
{
double balance;
public void synchronized deposit(double amount)
{
balance+=amount;
}
public void synchronized withdraw(double amount)
{
balance-=amount;
}
public void transferTo(BankAccount b, double amount)
{
this.withdraw(amount);
b.deposit(amount);
}
}
の何が問題なのか教えてくださいtransferTo()
。での制限チェックを省略して申し訳ありませんbalance
。transferTo をアトミックにしないと問題 (デッドロック) が発生しないかどうか、実際に心配しています。そのような状況の例は素晴らしいでしょう。