Update text about modern threading implementations (NPTL vs LinuxThreads).

This commit is contained in:
Michael Kerrisk 2007-07-10 21:39:16 +00:00
parent 6f1a1e6143
commit 9bc64d3e14
1 changed files with 7 additions and 7 deletions

View File

@ -111,7 +111,8 @@ Over time, two threading implementations have been provided by
the GNU C library on Linux:
.IP \- 3
.B LinuxThreads
This is the original (now obsolete) Pthreads implementation.
This is the original Pthreads implementation.
Since glibc 2.4, this implementation is no longer supported.
.IP \- 3
.B NPTL
(Native POSIX Threads Library)
@ -119,7 +120,8 @@ This is the modern Pthreads implementation.
By comparison with LinuxThreads, NPTL provides closer conformance to
the requirements of the POSIX.1 specification and better performance
when creating large numbers of threads.
NPTL requires features that are present in the Linux 2.6 kernel.
NPTL is available since glibc 2.3.2,
and requires features that are present in the Linux 2.6 kernel.
.PP
Both of these are so-called 1:1 implementations, meaning that each
thread maps to a kernel scheduling entity.
@ -131,9 +133,6 @@ In NPTL, thread synchronization primitives (mutexes,
thread joining, etc.) are implemented using the Linux
.BR futex (2)
system call.
.PP
Modern GNU C libraries provide both LinuxThreads and NPTL, with the
latter being the default (if supported by the underlying kernel).
.SS LinuxThreads
The notable features of this implementation are the following:
.IP \- 3
@ -297,7 +296,7 @@ in the C shell).
Since glibc 2.3.2, the
.BR getconf (1)
command can be used to determine
the system's default threading implementation, for example:
the system's threading implementation, for example:
.nf
.in +4
@ -317,7 +316,8 @@ bash$ $( ldd /bin/ls | grep libc.so | awk '{print $3}' ) | \\
.in -4
.fi
.SS "Selecting the Threading Implementation: LD_ASSUME_KERNEL"
On systems with a glibc that supports both LinuxThreads and NPTL, the
On systems with a glibc that supports both LinuxThreads and NPTL
(i.e., glibc 2.3.\fIx\fP), the
.B LD_ASSUME_KERNEL
environment variable can be used to override
the dynamic linker's default choice of threading implementation.