锁定周期引起的死锁?不可能的事件导致它或只是一个虚假的直觉
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字。
谢谢,
威廉
棘轮怪物回答我:
重要的是要记住,在锁定一个单词和锁定下一个单词之间的过程可以被中断,或者另一个单词可以更快地锁定第二个单词。
我不确定这一点,这解释了为什么我的死锁经常发生。
非常感谢,
以上是关于锁定周期引起的死锁?不可能的事件导致它或只是一个虚假的直觉的主要内容,如果未能解决你的问题,请参考以下文章