在多线程环境中,可以通过以下两种方式之一取消线程:通过异步取消或延迟取消。 由于我在参考教科书中读到,在用于多线程的两级模型中,用户线程库负责线程调度,我想知道谁负责操作系统中的线程取消? < / p>
它也是用户线程库吗?
这对我来说听起来不是一个非常明智的想法,因为图书馆可以很好地做任何它想做的事情,这对我来说似乎是一个巨大的设计缺陷。 (最终可能会有无法杀死的线程擦拭整个磁盘!)
可能是操作系统本身吗?
然后,操作系统可能甚至不知道线程(例如在多对一模型中),因此最终无法识别此类线程。
无论如何,任何启蒙都会受到赞赏!
答案 0 :(得分:1)
答案取决于线程的实现方式。如果您按照建议,线程是通过用户库创建的,那么终止进程就会杀死线程。根据操作系统的不同,库可能能够实现线程的清理(而不是突然死亡)。
如果线程在OS内核中实现,则操作系统必须处理线程终止。
答案 1 :(得分:0)
“擦除硬盘的线程”不是问题。用户模式线程可以与主线程一样多。此外,操作系统通常可以在不关心其内部细节的情况下终止整个用户进程,因此如果这些细节涉及用户模式线程则无关紧要。
当然,当操作系统负责进程中的线程时,它必须在删除进程之前停止这些线程。显然,操作系统无法安排这些线程,因为它们的代码会因停止进程的地址空间而死亡。