Concurrency 术语-如何调用等待从未发生的事件而阻塞的线程

Concurrency 术语-如何调用等待从未发生的事件而阻塞的线程,concurrency,terminology,Concurrency,Terminology,如果一个线程正在等待一个条件、一个未来、一个永远倒数的锁存器(由于逻辑中的一个错误,该错误本应异步通知该条件、完成未来、将锁存器倒数为零等等),那么该错误的正确名称是什么?僵局活锁?还有别的吗 具体地说,将不处于平局的事物称为死锁是错误的,但实际上被阻止的事物称为活锁也是错误的,但最好有一个足够具体的术语将这两者区分开来。在书的第8.2.2节中,有一个像您所描述的问题,它被称为“丢失的唤醒”: 正如锁天生容易受到死锁的攻击一样,条件对象天生容易受到丢失唤醒的攻击,在这种情况下,一个或多个线程会永

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

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

在书的第8.2.2节中,有一个像您所描述的问题,它被称为“丢失的唤醒”:

正如锁天生容易受到死锁的攻击一样,条件对象天生容易受到丢失唤醒的攻击,在这种情况下,一个或多个线程会永远等待,而没有意识到它们等待的条件已变为真

这本书的内容很狭隘,它专门讨论锁定时检查条件变量。但是,将它的使用扩展到任何情况下,如果有什么事情在等待着一个永远不会发生的事件,这似乎并不是一个很大的延伸

所以我听说这种类型的错误被称为“丢失的通知”或“丢失的信号”


我不会把这种情况称为饥饿,因为丢失的信号本身并不是一个系统资源,线程一旦醒来就可以使用它来完成工作。资源是指CPU时间、内存、文件句柄或其他工作所需的资源。操作系统线程本身就是资源,此错误可能导致线程退出游戏,如果丢失的唤醒错误发生在足够多的线程上,则最终可能导致某些线程饿死。

饿死:@BurakSerdar-感谢链接。这似乎不是一个完美的术语,因为没有什么是“饥饿”的,等待的线程永远不会收到通知。如果一个等待的线程因为错误或不公平的调度而永远没有机会运行,那么它就会被饿死。这显然不是一个死锁,其中>=2个进程通过请求另一个进程持有的资源而互相阻塞,这不是一个活锁,其中>=2个进程互相阻塞是因为它们使用了不允许它们继续的死锁避免策略,而不是饥饿,因为没有其他进程阻碍系统继续。在我看来,这只是一个没有特殊名称的编程错误。示例:具有回调的函数,该函数在完成时未调用此回调。它值得一个特别的名字吗?绝对比“死锁”、“饥饿”和不精确的“挂断”要好。我会继续用这个。谢谢你把它挖出来。