Comment pthread mis en œuvre dans le noyau linux 3.2?

tous,

Le code ci-dessous provient de "Avancées de la Programmation en Environnement Unix", il crée un nouveau thread, et imprime le processus d'id et l'id de thread principal et de nouveaux threads.

Dans le livre, il dit que sous linux, la sortie de ce code permettrait de montrer que deux threads différents
id de processus, parce que pthread utilise de processus léger à émuler fil. Mais quand j'ai couru ce code dans Ubuntu 12.04, il a noyau 3.2, imprimée la même pid.

oui, le nouveau noyau linux changer la mise en œuvre interne de 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 jiluo | 2012-05-01