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

Schreibe einen Kommentar