【发布时间】:2010-12-27 16:11:16
【问题描述】:
死锁通常意味着线程(或进程)A在等待线程B,同时线程B也在等待线程A。
目前我在我们的应用程序中遇到了类似的情况。线程 A 正在等待线程 B 设置事件。但是,线程 B 不等待线程 A,它只是不会设置事件(无论出于何种原因)。我想知道这种情况是否也可以称为“死锁”,或者还有其他术语吗?
【问题讨论】:
标签: multithreading concurrency terminology
死锁通常意味着线程(或进程)A在等待线程B,同时线程B也在等待线程A。
目前我在我们的应用程序中遇到了类似的情况。线程 A 正在等待线程 B 设置事件。但是,线程 B 不等待线程 A,它只是不会设置事件(无论出于何种原因)。我想知道这种情况是否也可以称为“死锁”,或者还有其他术语吗?
【问题讨论】:
标签: multithreading concurrency terminology
我会称之为错误或糟糕的设计。但如果一个线程还在运行,则不是死锁。
【讨论】:
严格来说,不,这不是死锁,这就是您最初所说的(除了通常可能有一个完整的线程循环,每个线程都在等待下一个锁:A->B->...->Z ->A)。
我想你可以称之为resource starvation,但这是一个相当笼统的术语,也涵盖了死锁。
【讨论】:
我称之为starvation(资源是CPU),而不是deadlock。
【讨论】:
是的 - 我也将其称为死锁。
但是,只有一个线程(线程 A)会受到影响,而不是整个应用程序。
【讨论】:
Thread.Sleep(-1))不是死锁。
这是我的观点:
死锁是程序的全局状态不再进行的情况。 如果 A 被阻塞,但程序仍然可以终止,因为 B 可能找到解决方案,这不是死锁。
【讨论】: