Multithreading 为什么以不同的顺序解锁两个锁定的银行帐户会导致死锁?

Multithreading 为什么以不同的顺序解锁两个锁定的银行帐户会导致死锁?,multithreading,thread-safety,mutex,deadlock,Multithreading,Thread Safety,Mutex,Deadlock,如果我在不锁定的情况下修改银行帐户,其他人可以同时尝试修改它。这是一场比赛,结果将是未定义的行为(通常丢失或神奇地创造金钱) 转账时,我修改了2个银行账户。所以它们都需要被锁定 问题是,当锁定多个东西时,每个储物柜必须以相同的顺序锁定和解锁,否则会出现死锁。 示例:从帐户A中提款并存入帐户B 所以,我会先锁定A,然后锁定B。如果我先解锁B,然后锁定A,为什么会导致死锁 请解释。因为您可以满足以下顺序: 线程1锁定A 螺纹2锁紧B 线程1尝试锁定B和块 线程2尝试锁定A和块 两个线程都在等待对

如果我在不锁定的情况下修改银行帐户,其他人可以同时尝试修改它。这是一场比赛,结果将是未定义的行为(通常丢失或神奇地创造金钱)

转账时,我修改了2个银行账户。所以它们都需要被锁定

问题是,当锁定多个东西时,每个储物柜必须以相同的顺序锁定和解锁,否则会出现死锁。

示例:从帐户A中提款并存入帐户B

所以,我会先锁定A,然后锁定B。如果我先解锁B,然后锁定A,为什么会导致死锁


请解释。

因为您可以满足以下顺序:

  • 线程1锁定A
  • 螺纹2锁紧B
  • 线程1尝试锁定B和块
  • 线程2尝试锁定A和块
两个线程都在等待对方,因此出现死锁


为了避免这种情况,您必须始终以相同的顺序获取锁。解锁顺序并不重要。

不想故意装腔作势,但duckduckgo'ing“互斥死锁”的第一个结果有一个示例和解释。我相信谷歌、必应或任何其他搜索引擎都会是一样的…@Shawn我会读你所指的内容。我知道生产者-消费者类型问题中存在死锁,但银行账户中不存在。呃,你们用互斥锁锁什么并不重要。你可以用任何东西作为例子。重要的是你如何进行锁定。我不确定是否有重复的问题,所以-我没有罚款一个,但搜索是皮塔处理。