【发布时间】:2010-12-09 08:22:31
【问题描述】:
编写用于实现线程库的代码是内核代码的一部分吗? pthread_create() 等函数的实现是内核的一部分吗?
【问题讨论】:
标签: multithreading operating-system linux-kernel
编写用于实现线程库的代码是内核代码的一部分吗? pthread_create() 等函数的实现是内核的一部分吗?
【问题讨论】:
标签: multithreading operating-system linux-kernel
在 Linux 中,pthread_create() 等。作为 glibc 项目的一部分实现。它使用(非便携式、Linux 特定的)系统调用clone()。 (Linux的fork()也是按照clone()来实现的)。一些 BSD 也有类似的系统调用,称为 rfork()。
我的理解是clone() 或rfork() 都将创建一个新进程,但是您可以指定一个标志,上面写着“使用写时复制语义给它一个不同的地址空间”。所以,如果你想要fork(),你可以指定那个标志,但是如果你想创建一个线程,你不需要,你最终会得到一个共享的地址空间。
(已编辑以提供更多详细信息)
【讨论】:
线程有时纯粹在用户空间中实现(然后也称为“绿色线程”),但通常在内核空间中实现。 wikipedia article 解释得很好。
【讨论】: