在操作系统中,谁负责线程取消?
In an operating system, who is responsible for thread cancellation?
在多线程环境中,可以通过以下两种方式之一取消线程:通过异步取消或延迟取消。
因为我在参考教材上看到多线程的二级模型中,用户线程库负责线程调度,我想知道操作系统中谁负责线程取消?
难道也是用户线程库?
这对我来说听起来不是一个好主意,因为图书馆可以做任何它想做的事,这对我来说似乎是一个巨大的设计缺陷。 (您最终可能会遇到无法杀死的线程擦除整个磁盘!)
难道是 OS 本身?
然后,OS 甚至可能不知道线程(例如在多对一模型中),因此它最终无法识别此类线程。
无论如何,任何启发都表示赞赏!
"Threads wiping your hard disk" 不是问题。用户模式线程可以做的和主线程一样多。此外,OS通常可以在不关心其内部细节的情况下杀死整个用户进程,因此如果这些细节涉及用户模式线程则无关紧要。
当然,当OS负责进程中的线程时,它必须在删除进程之前停止这些线程。显然,OS 无法再调度这些线程,因为它们的代码随着已停止进程的地址 space 而死。
答案取决于线程的实现方式。如果像您建议的那样,线程是通过用户库创建的,那么终止进程就会终止线程。根据操作系统的不同,库可能能够实现线程的清理(而不是突然死亡)。
如果线程在 OS 内核中实现,操作系统必须处理线程终止。
在多线程环境中,可以通过以下两种方式之一取消线程:通过异步取消或延迟取消。 因为我在参考教材上看到多线程的二级模型中,用户线程库负责线程调度,我想知道操作系统中谁负责线程取消?
难道也是用户线程库?
这对我来说听起来不是一个好主意,因为图书馆可以做任何它想做的事,这对我来说似乎是一个巨大的设计缺陷。 (您最终可能会遇到无法杀死的线程擦除整个磁盘!)
难道是 OS 本身?
然后,OS 甚至可能不知道线程(例如在多对一模型中),因此它最终无法识别此类线程。
无论如何,任何启发都表示赞赏!
"Threads wiping your hard disk" 不是问题。用户模式线程可以做的和主线程一样多。此外,OS通常可以在不关心其内部细节的情况下杀死整个用户进程,因此如果这些细节涉及用户模式线程则无关紧要。
当然,当OS负责进程中的线程时,它必须在删除进程之前停止这些线程。显然,OS 无法再调度这些线程,因为它们的代码随着已停止进程的地址 space 而死。
答案取决于线程的实现方式。如果像您建议的那样,线程是通过用户库创建的,那么终止进程就会终止线程。根据操作系统的不同,库可能能够实现线程的清理(而不是突然死亡)。
如果线程在 OS 内核中实现,操作系统必须处理线程终止。