问:我理解 Pthread 是一个符合 POSIX 标准的线程库
答:是的。实际上,“Pthreads”代表“Posix 线程”:
http://en.wikipedia.org/wiki/Pthreads
问:在类 Unix 操作系统中可用。
A:实际上,它适用于许多不同的操作系统……包括 Windows、MacOS……当然还有 Linux、BSD 和 Solaris。
问:关于线程,我读到有三种不同的模型
现在你变得模糊了。 “线程”是一个非常通用的术语。有很多很多不同的模型。还有很多很多不同的方式可以描述和/或实现“线程”。包括 Java 线程模型或 Ada 线程模型之类的东西。
问:当我调用 pthread_create() 创建线程时,我是否创建了一个线程?
用户级线程?
答:是的:您在用户空间中所做的几乎所有事情都在您自己的私有“用户空间”中受到“保护”。
问:用户级线程:内核不知道。
A:不。内核知道一切 :)
Q:内核级线程:内核直接支持多线程
过程中的控制。
A:是的,有“内核线程”之类的东西。
而且,碰巧的是,Linux 广泛使用内核线程。例如,Linux 系统中的每一个进程都是一个“内核线程”。并且每个用户创建的 pthread 也被实现为一个新的“内核线程”。 “工作线程”也是如此(对任何用户级进程完全不可见)。
但这是一个高级主题,您无需了解即可有效使用 pthread。这是一本很好的书,详细讨论了这一点 - 以及许多其他主题:
[Linux 内核开发,罗伯特·洛夫][1]
记住:“Pthreads”是一个接口。它的实现方式取决于平台。 Linux 使用内核线程; Windows 使用 Win32 线程等。
================================================ ==============================
附录:
由于人们似乎仍然在关注这个旧线程,我认为参考这篇文章会很有用:
https://stackoverflow.com/a/11255174/421195
Linux 通常使用两种 pthread 实现:
LinuxThreads 和 Native
POSIX Thread Library(NPTL),
尽管前者在很大程度上已经过时了。 2.6 的内核提供
NPTL,它提供更接近 SUSv3 的一致性,并执行
尤其是当有很多线程时更好。
您可以查询
shell下pthreads使用命令的具体实现:
getconf GNU_LIBPTHREAD_VERSION
您还可以在The
Linux Programming Interface 中获得更详细的实现差异。
“Pthreads”是一个库,基于 Posix 标准。 pthreads 库的实现方式因平台和库而异。
[1]:http://www.amazon.com/Linux-Kernel-Development-Robert-Love/dp/0672329468