Как pthread реализован в ядре linux 3.2?

все,

Приведенный ниже код взят из "Расширенного программирования в среде Unix", он создает новый поток и печатает идентификатор процесса и идентификатор потока для основного и нового потоки.

В книге сказано, что в Linux вывод этого кода покажет, что два потока имеют разные идентификаторы процессов, потому что pthread использует упрощенный процесс для эмуляции потока. Но когда я запустил этот код в Ubuntu 12.04, у него было ядро ​​3.2, выводя тот же pid.

Итак,изменяет ли новое ядро ​​Linux внутреннюю реализацию 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;
}
14
задан jiluo 1 May 2012 в 02:20
поделиться