线程什么时候死?
When does a thread die?
作为CS的学生,我学习了几乎所有课本上的概念。
我知道线程死掉时可能会出现不好的情况。
但我想知道什么时候线程会意外死掉。
什么时候可以在现实世界中发生?
让我听听你的真实经历。
**
当我读到当线程因持有锁而意外死亡时可能会发生坏事时,我想到了这个问题。
一个线程在没有事情可做时应该死掉。在我见过的每个线程框架中,您通过提供一个函数来告诉线程要做什么,框架将在线程内一次调用该函数。
当该函数 returns(通过正常 return 或通过抛出未捕获的异常)时,它告诉框架线程没有什么可做的,因此框架杀死线程。
在某些框架中,特别是在语言没有任何非本地退出机制(即异常)的情况下,框架还会提供一个函数,线程可以调用该函数来显式终止自身。
I want to know when a thread can die accidentally
从库开发人员或 OS 开发人员的角度来看,这不可能发生。如果一个线程可能会死掉 "by accident," 那么这将是库 and/or OS.
中的一个严重缺陷
您的代码 可能会不小心做一些您不希望它做的事情。那也是一个缺陷,但是这个缺陷是你自己去发现和修复的。
- 如果您的缺陷导致未捕获的异常,那么框架可能只会杀死一个线程,或者它可能会杀死整个进程。它无能为力:您不能指望库作者知道如何处理任意程序中的任意异常并从中恢复。
- 如果您的缺陷导致硬件故障(例如,尝试读取或写入无效的内存地址),则情况大致相同。 OS 可能会通过在您的线程中引发异常来响应(在这种情况下,请参见上文),或者它可能会直接跳到终止线程或整个进程的部分。
- 如果您的缺陷导致其他一些行为(例如,死锁、无限循环等),那么线程可能不会死,直到您通过向进程发送信号等进行干预
作为CS的学生,我学习了几乎所有课本上的概念。
我知道线程死掉时可能会出现不好的情况。
但我想知道什么时候线程会意外死掉。
什么时候可以在现实世界中发生?
让我听听你的真实经历。
** 当我读到当线程因持有锁而意外死亡时可能会发生坏事时,我想到了这个问题。
一个线程在没有事情可做时应该死掉。在我见过的每个线程框架中,您通过提供一个函数来告诉线程要做什么,框架将在线程内一次调用该函数。
当该函数 returns(通过正常 return 或通过抛出未捕获的异常)时,它告诉框架线程没有什么可做的,因此框架杀死线程。
在某些框架中,特别是在语言没有任何非本地退出机制(即异常)的情况下,框架还会提供一个函数,线程可以调用该函数来显式终止自身。
I want to know when a thread can die accidentally
从库开发人员或 OS 开发人员的角度来看,这不可能发生。如果一个线程可能会死掉 "by accident," 那么这将是库 and/or OS.
中的一个严重缺陷您的代码 可能会不小心做一些您不希望它做的事情。那也是一个缺陷,但是这个缺陷是你自己去发现和修复的。
- 如果您的缺陷导致未捕获的异常,那么框架可能只会杀死一个线程,或者它可能会杀死整个进程。它无能为力:您不能指望库作者知道如何处理任意程序中的任意异常并从中恢复。
- 如果您的缺陷导致硬件故障(例如,尝试读取或写入无效的内存地址),则情况大致相同。 OS 可能会通过在您的线程中引发异常来响应(在这种情况下,请参见上文),或者它可能会直接跳到终止线程或整个进程的部分。
- 如果您的缺陷导致其他一些行为(例如,死锁、无限循环等),那么线程可能不会死,直到您通过向进程发送信号等进行干预