1.线程ID的打印可以用%u来输出,可以强转成unsignedint 打印。
2.pthread_create调用后会返回一个值(int)创建成功后该值为0,可以通过以下方式进行检查:
if(err != 0)
err_quit("can't create thread: %s\n",strerror(err));//strerror()返回一个指向字符串的指针。
3.在main中创建的线程都调用getpid和pthread_self得到的
进程号和线程号可以不是一样的在Linux中,进程号是一样的,但线程号十进制和十六进制都不一样。
代码:Figure 11.2
#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 *thr_fn(void *arg)
{
printids("new thread: ");
return ((void *)0);//
}
int main(void)
{
int err;
err = pthread_create(&ntid, NULL, thr_fn, NULL);
if(err != 0)
err_quit("can't create thread: %s\n", strerror(err));
printids("main thread:");
sleep(1);
exit(0);
}