大家好,
以下代码来自“Unix环境高级编程”一书,它创建了一个新的线程,并打印主线程和新线程的进程id和线程id。
在这本书中,它说在Linux系统中,该代码的输出会显示两个线程有不同的进程id,因为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;
}