如何实现线程库?

4
编写实现线程库的代码是内核代码的一部分吗? pthread_create()等函数的实现是内核的一部分吗?
2个回答

5
在Linux中,pthread_create()等函数是作为glibc项目的一部分实现的。它使用(非可移植的、Linux特定的)系统调用clone()。(Linux的fork()也是基于clone()实现的)。一些BSD也有类似的系统调用,称为rfork()
我理解的是,clone()rfork()都可以创建一个新进程,但你可以指定一个标志,表示“使用写时复制语义来给它一个不同的地址空间”。所以,如果你想要fork(),你需要指定该标志,但如果你想创建一个线程,你不需要,这样你就得到了一个共享的地址空间。
(编辑以提供更多细节)

3

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接