2016-05-24 70 views
0

在多线程环境中,可以通过以下两种方式之一取消线程:通过异步取消延期取消。 由于我已阅读参考教材,在多线程的两级模型中,用户线程库负责线程调度,我想知道谁负责操作系统中的线程取消?在一个操作系统中,谁负责线程取消?

它也是用户线程库吗?

这听起来不像是一个非常好的想法,因为图书馆可以很好地做任何事情,这似乎是一个巨大的设计缺陷给我。 (你最终可以用不可擦写的线程擦拭你的整个磁盘!)

它可能是操作系统本身?

然后,操作系统甚至可能不会意识到线程(例如在多对一模型中),因此最终无法识别这些线程。

无论如何,任何启示感激!

回答

1

答案取决于如何实现线程。如果您像建议的那样通过用户库创建线程,那么杀死该进程会杀死线程。根据操作系统的不同,库可能能够清理线程(而不是猝死)。

如果线程在OS内核中实现,则操作系统必须处理线程终止。

+0

如果我得到这个正确的线程被创建它们的实体取消? –

+1

就是这样。 – user3344003

0

“擦除硬盘的线程”是不成问题的。用户模式的线程可以和主线程一样多。此外,操作系统通常可能会杀死整个用户进程而不关心其内部细节,因此如果这些细节涉及用户模式线程,则无关紧要。

当然,当OS负责进程中的线程时,它必须在删除进程之前停止这些线程。显然,操作系统不能再调度这些线程,因为他们的代码随着停止进程的地址空间而死亡。