锁定周期引起的死锁?不可能的事件导致它或只是一个虚假的直觉

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了锁定周期引起的死锁?不可能的事件导致它或只是一个虚假的直觉相关的知识,希望对你有一定的参考价值。

非常感谢你的帮助。

我想了解真正导致我认为是僵局的原因:

我有标准对象,我们称之为“单词”,其中包含3个字母和一个键; (这对我的问题并不重要)

我有一个夫妻的容器(列表),其中一对夫妇只是:2个单词和1对夫妇。

我有一个函数,假设在Couples列表上做一些计算,它可能会在计算过程中修改字母和键,但是当计算结束时,我们可以存储结果并将其重置为初始值。

考虑使用并行for循环来获取所有情侣的结果的代码。这会在调用getResult()函数之前对第一个单词使用锁定然后锁定第二个单词,为什么会发生死锁?

我的第一个想法是,如果我们有:

情侣1:A B.

情侣2:B C.

情侣3:C D.

情侣4:D A.

情侣5:E

如果一个线程接受了Couple 5,那么获取这对4的线程将锁定D并等待,等等......对于Couple 2。

我的直觉是,如果循环模式出现在我的夫妻列表中,可能会发生死锁。另一方面,我无法构建一个解释死锁外观的示例,而不考虑其中一个事件:

  • 同时2个不同的线程有A,B和B A,每个线程同时锁定另一个词(对我来说是不可能的)。
  • 一个线程优先于前一个(例如:我找不到任何一个,最后我认为它等同于同时2个不同的线程具有Couples AB和BA,并且每个线程同时锁定另一个字。就是这样,考虑到一个大周期,它发生的概率与计算线程数所需的时间比例一样高。

我的分析是对的吗?

如果最终死锁的原因不是由于“同时”事件引起的,我很高兴知道是什么导致它,或者如果根据线程数或周期长度等更精确地出现死锁概率,我会很高兴...讨论。

实际上,我有10 ^ 5夫妻10 ^ 4字。

谢谢,

威廉

答案

棘轮怪物回答我:

重要的是要记住,在锁定一个单词和锁定下一个单词之间的过程可以被中断,或者另一个单词可以更快地锁定第二个单词。

我不确定这一点,这解释了为什么我的死锁经常发生。

https://cs.stackexchange.com/questions/88936/deadlock-caused-by-a-cyle-of-locks-unprobable-event-causing-it-or-just-a-false

非常感谢,

以上是关于锁定周期引起的死锁?不可能的事件导致它或只是一个虚假的直觉的主要内容,如果未能解决你的问题,请参考以下文章

哈希冲突导致死锁?

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

您是不是应该请求 .NET 中的锁定超时?

java多线程13 : 死锁

Java多线程7:死锁

InnoDB怎么可能在一行上死锁?