NPTL 的意思是 "Native POSIX Thread Libray". 話說 Linux 裡面的 thread 原本不是真的 thread, 而是 process 偽裝而成的, 它們被稱為 Linux thread. 基本上, 原來的 Linux thread 被拷貝成多份, 每一份都使用同樣的定址空間, 於是乎可以達到近似於 thread 的效果.
不過畢竟它並不是真正的 thread, 所以若是信號送給其中的一個 Linux thread, 結果這個 Linux thread (實則為 process) 恰好被 block 住了, 那麼這個信號就永遠無法被其他的 Linux thread 收到. 比方說 kill() 很可能就無法把所有的 Linux thread 殺死, 而是有些死了, 有些變成殭屍.
在使用 GDB debug 的時候, 也只能針對某個 Linux thread 做控制, 而不能輕易地用 stop 一個 process ID, 就停止它底下所有的 thread.
為了解決 Linux thread 的問題, Red Hat 提供的 solution 就是 NPTL. NPTL 不需要一個額外的化妝師 (管理線程 – manager thread) 將 process 化妝成 thread. 也不需要在終止所有 Linux thread 之後才能回收它們所使用的記憶體.
相對地, 原本的 Linux thread 相當擅長 process 與 process 之間的同步, 畢竟大家內在都還是 process. 於是 NPTL 也多出了一個機制來增加 process 等級之間的同步. 這個機制就是 futex (fast userspace "mutex).
在 Linux 下編譯的代碼, 可以選擇支援 NPTL 或是 Linux Thread 的 glibc 版本來編譯. NPTL 基本上優於 Linux thread, 但兩者都堪用.
[ref]
1. Linux programmer's manual: futex