Q: 我了解Pthread是符合POSIX标准的线程库。
A: 是的。实际上,“Pthreads”代表“Posix线程”:
http://en.wikipedia.org/wiki/Pthreads
Q: 它在类Unix操作系统中可用。
A: 实际上,它适用于许多不同的操作系统...包括Windows、MacOS...当然还有Linux、BSD和Solaris。
Q: 关于线程,我读到有三种不同的模型。
现在你有点模糊了。“线程”是一个非常通用的术语。有许多许多不同的模型。而且有许多不同的方式可以描述和/或实现“线程”。包括像Java线程模型或Ada线程模型这样的东西。
Q: 当我调用pthread_create()创建一个线程时,我创建了一个用户级线程吗?
A: 是的:你在用户空间中做的几乎所有事情都是在你自己的私有“用户空间”中“受保护”的。
Q: 用户级线程:内核不知道它。
A: 不是的。内核知道一切 :)
Q: 内核级线程:内核直接支持进程中的多个控制线程。
A: 是的,有这样一种东西叫做“内核线程”。
而且,恰好Linux广泛使用内核线程。例如,在Linux系统中,每个进程都是一个“内核线程”。每个用户创建的pthread也被实现为一个新的“内核线程”。工作线程(对任何用户级进程完全不可见)也是如此。
但这是一个高级主题,您不需要理解就可以有效地使用pthread。以下是一本详细讨论了此主题和许多其他主题的好书:
Linux Kernel Development, Robert Love
记住:“Pthreads”是一个接口。它的实现取决于平台。Linux使用内核线程;Windows使用Win32线程等。
===========================================================================
附录:
由于人们似乎仍然在访问这个旧帖子,我认为引用这篇文章可能会有用:
https://dev59.com/0Gkv5IYBdhLWcg3wvDJF#11255174
Linux通常使用两种pthread实现:
LinuxThreads 和 Native
POSIX Thread Library(NPTL),
尽管前者已经大部分过时。从2.6开始,内核提供了NPTL,它更接近SUSv3标准,并且在有许多线程时表现得更好。
您可以在shell下使用命令查询pthread的特定实现:
getconf GNU_LIBPTHREAD_VERSION
您还可以在The
Linux Programming Interface中获取更详细的实现差异。
“Pthreads”是一个基于Posix标准的库。 pthreads库的实现会因平台和库而异。