NPTL和pthread令人困惑

时间:2011-12-20 13:22:03

标签: linux pthreads posix nptl

NPTL和POSIX线程之间的基本区别是什么?这两个是如何进化的?

3 个答案:

答案 0 :(得分:31)

POSIX线程(pthread)不是一个实现,它是一个API规范(标准,在纸上,英文)中的几个函数,其名称以pthread_开头,并在<pthread.h>中定义头。 POSIX也是一套规范。

NPTL现在位于Linux上的GNU Libc内,并且是(或者至少很难尝试)POSIX线程的实现。它是Linux系统上的一堆源代码和二进制代码。 使用gcc -pthread编译并与-pthread链接的应用程序今天在Linux上使用NPTL代码。

附加物

pthread - s存在替代实现:在Linux上,MUSL Libc旨在符合Posix(这意味着有pthreads);在其他Posix系统(AIX,Solaris,...)上你也有pthreads(但它们不是NPTL或Glibc)。

答案 1 :(得分:5)

“POSIX线程”是一种“标准”,用于定义线程的API。即它表明系统中应该存在pthread_exit ()等函数,并描述它们应该如何表现。所有符合POSIX标准的操作系统都以自己的方式实现POSIX线程。

NPTL是一系列功能,使“Linux”(内核)能够有效地实现“POSIX线程”(标准)。

您可以阅读有关NPTL及其如何发生的更多信息here

答案 2 :(得分:2)

我想你最好的信息来源是Wikipedia,并从那里开始链接。

确实没有什么区别:NPTL只是当前的POSIX线程的Linux实现,你仍然使用pthread_ *系列函数。在Linux历史的早期,使用了一个名为libpthreads的专用库。 NPTL在2003年左右出现2.6+内核,请参阅上面的链接了解更多详情。

[BTW:NPTL ==原始Posix线程库]