Wie funktioniert der pthread-Implementierung in linux-kernel 3.2?
alle,
Den code unten kommt von "Erweiterte Programmierung in der Unix-Umgebung", es erstellt einen neuen thread auf und gibt die Prozess-id und thread-id für Haupt-und neue threads.
In dem Buch heißt es, dass unter linux die Ausgabe dieses Codes zeigen würde, dass zwei threads verschiedene
Prozess-ids, weil pthread verwendet lightweight-Prozess zu emulieren thread. Aber wenn ich lief diesen code in Ubuntu 12.04, es hat kernel 3.2, druckte die gleiche pid.
so, ist der neue linux kernel ändern die interne Implementierung von pthread?
#include "apue.h"
#include <pthread.h>
pthread_t ntid;
void printids(const char *s) {
pid_t pid;
pthread_t tid;
pid = getpid();
tid = pthread_self();
printf("%s pid %u tid %u (0x%x)\n",
s, (unsigned int)pid, (unsigned int)tid, (unsigned int)tid);
}
void *thread_fn(void* arg) {
printids("new thread: ");
return (void *)0;
}
int main(void) {
int err;
err = pthread_create(&ntid, NULL, thread_fn, NULL);
if (err != 0)
err_quit("can't create thread: %s\n", strerror(err));
printids("main thread: ");
sleep(1);
return 0;
}
InformationsquelleAutor der Frage jiluo | 2012-05-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Unter Linux
pthread
verwendet dieclone
syscall mit einem speziellen flagCLONE_THREAD
.Sehen die Dokumentation von
clone
syscall.Und in der Tat, Linux tun ändern der thread-Implementierungda POSIX.1 erfordert threads teilen sich einen gleichen Prozess-ID.
InformationsquelleAutor der Antwort Zifei Tong
Linux verwendet in der Regel zwei Implementierungen von pthreads: LinuxThreads und Native POSIX Thread Library(NPTL)obwohl die ehemaligen ist weitgehend obsolet. Kernel 2.6 bietet NPTL, die sehr viel engere übereinstimmung zu SUSv3, und führen Sie besser, vor allem, wenn es viele threads.
Sie können die Abfrage der spezifischen Implementierung von pthreads unter shell mit dem Befehl:
getconf GNU_LIBPTHREAD_VERSION
Können Sie auch eine detaillierte Umsetzung Unterschied in The Linux Programming Interface.
InformationsquelleAutor der Antwort WiSaGaN