使用Linux的pthread库创建的线程是用户级线程还是内核级线程?
我希望这个问题能得到专业的解答。因为我听说不同版本的 Linux 内核以及不同的编译器版本会对问题的答案产生影响。
使用Linux的pthread库创建的线程是用户级线程还是内核级线程?
如果它是使用托管在操作系统之上的程序或库创建的,那么它就是用户级线程。
[...] 我听说不同版本的 Linux 内核以及不同的编译器版本会对问题的答案产生影响。
不,他们没有。在用户空间中运行的线程是用户级线程。在内核中运行的线程是内核级线程。除非您正在编写内核代码,否则用户级线程是您可以直接启动或交互的唯一类型。如果您正在编写内核代码,那么您就没有 pthreads 或其他库可以利用,只有内核本身。
您可能对历史上 Linux 上有多种 Pthreads 实现感到困惑,主要是:
更一般地,存在完全在用户空间中调度的线程实现,即所谓的“
绿色线程”。我不知道有任何 Linux pthreads 实现使用这种方法,但如果有的话,它们肯定会提供用户级线程。
Linux 确实有内核级线程,但您的用户级程序不会看到它们或直接与它们交互。