术语 - 你如何称线程阻塞等待从未发生的事件

Terminology - how do you call a thread blocked waiting on an event that never happens

如果一个线程一直在等待一个条件、一个未来、一个倒计时锁存器(因为逻辑中的错误应该异步通知条件、完成未来、将锁存器计数为零等。 ), 它的正确名称是什么?僵局?活锁?还有别的吗?

具体来说,将不处于平局的事物称为死锁,但也将实际上被阻止的事物称为活锁,感觉是错误的,但最好有一个足够具体的术语来区分这两者。

在书The Art of Multiprocessor Programming的第8.2.2节中,有一个像你描述的那样的问题,它被称为“丢失唤醒”:

Just as locks are inherently vulnerable to deadlock, Condition objects are inherently vulnerable to lost wakeups, in which one or more threads wait forever without realizing that the condition for which they are waiting has become true.

书上的上下文比较狭隘,专门讲加锁时检查条件变量。但是,将它的使用扩展到任何情况下似乎都不是一件容易的事,因为它正在等待一个永远不会发生的事件。

在 SO 上,我听说过这种称为“丢失通知”或“错过信号”的错误。

我不会将这种情况称为饥饿,因为丢失的信号本身并不是线程唤醒后用于工作的系统资源。资源是诸如 CPU 时间或内存或文件句柄之类的东西,或者它完成工作可能需要的其他东西。 OS 线程本身就是资源,这个错误可能会导致线程停止运行,如果丢失的唤醒错误发生在足够多的线程上,它最终可能会导致资源匮乏。