我想澄清x86体系结构上Linux中的用户线程和内核线程映射。
我想不出使用pthread库时在用户线程与内核线程之间具有多对一映射的情况。
例如,下面的用户空间代码使用pthread_create()
创建10个用户线程。我的理解是,每个pthread_create()
本质上都调用带有标志clone()
的系统调用CLONE_THREAD
,这在内核空间中创建了一个轻量级进程。因此,在这种情况下,总共创建了10个内核进程/线程。
因此,如果使用pthread,则用户线程和内核线程之间的映射始终是一对一的。
我对这个结论正确吗?
如果是这样,以防万一我想在用户线程和内核线程之间创建多对一或多对多映射,那么应该使用什么合适的API?还是由内核选择而不是由用户控制映射?
int main()
{
for(int i = 0; i < 10; i++)
pthread_create(xxx....).
return 0;
}