如何实现线程库?

时间:2009-10-23 05:08:26

标签: multithreading operating-system linux-kernel

编写用于实现线程库的代码是内核代码的一部分吗? pthread_create()等函数的实现是内核的一部分吗?

2 个答案:

答案 0 :(得分:5)

在Linux中,pthread_create()等。是作为glibc项目的一部分实现的。它使用(非可移植的,特定于Linux的)系统调用clone()。 (Linux的fork()也是以clone()的形式实现的。一些BSD也有类似的系统调用rfork()

我的理解是clone()rfork()都会创建一个新进程,但你可以指定一个标志,说“使用copy-on-write语义为它提供不同的地址空间” 。因此,如果你想要fork(),你可以指定那个标志,但是如果你想创建一个线程,你就不需要,并且最终得到一个共享地址空间。

(编辑以提供更多细节)

答案 1 :(得分:3)

线程有时纯粹在用户空间中实现(然后也称为“绿色线程”),但通常在内核空间中实现。 wikipedia article很好地解释了它。