【发布时间】:2019-02-17 18:26:11
【问题描述】:
https://stackoverflow.com/a/51890291/462608
如果我修改银行账户而不锁定它,其他人可能会同时尝试修改它。这是一场竞赛,结果将是未定义的行为(通常是丢失或魔法创造的金钱)。
转账时,我正在修改 2 个银行账户。所以他们都需要被锁定。
问题是,当锁定多个事物时,每个 locker 必须以相同的顺序锁定和解锁,否则就会出现死锁。
示例:从账户 A 提款并存入账户 B。
所以,我先锁A再锁B。那么如果我解锁B再解锁A,为什么会导致死锁呢?
请解释一下。
【问题讨论】:
-
不想刻薄,但是duckduckgo'ing“互斥死锁”的第一个结果有一个例子和解释。我敢肯定 google 或 bing 或任何其他搜索引擎都是一样的......
-
@Shawn 我会阅读你所指的内容。我知道生产者消费者类型问题中的死锁,但不知道银行账户中的死锁。
-
呃,你用互斥锁锁定什么并不重要。你可以用任何东西作为例子。重要的是您如何进行锁定。
标签: multithreading thread-safety mutex deadlock