gpt4 book ai didi

c# - 银行情况的死锁问题

转载 作者:行者123 更新时间:2023-11-30 13:13:38 25 4
gpt4 key购买 nike

我有一个问题,我无法解决这个问题

void Transfer(Account a, Account b, decimal amount) 
{
lock (a) {
lock (b) {
if (a.Balance < amount)
throw new InsufficientFundsExc();
a.Balance -= amount;
b.Balance += amount;
}
}
}

问题是“这是银行账户之间的转账。“lock(...)”结构用于对抗竞争条件。这是什么问题?您提出什么解决方案?您能帮帮我吗?

最佳答案

如果您在从 B 到 A 的传输同时进行从 A 到 B 的传输,它可能会死锁,因为您没有锁定顺序。

  • 线程 1 锁 A
  • 线程2锁B
  • 线程 1 等待 B
  • 线程 2 等待 A
  • 死了

但是为什么这段代码首先是多线程的?

您需要始终以相同的顺序取锁。例如,给每个锁一个整数 Id,并始终先锁定较低的 ID。

关于c# - 银行情况的死锁问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5930887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com