#include "apue.h"
#include <limits.h>
#include <pthread.h>
void* fun(void *arg)
{
printf("%lu: I'm alive\n", pthread_self());
pthread_exit(0);
}
int main(int argc, char **v)
{
pthread_t tid;
pthread_create(&tid, NULL, fun, NULL);
printf("%lu: I'm dead\n", pthread_self());
return 0;
}
$ ./a.out
3075692224: I'm dead
3075689280: I'm alive
3075689280: I'm alive
$ ./a.out
3076470464: I'm dead
有时,它会打印一条线。
我认为
一行:3076470464: I'm dead
要么
两行:
3075692224: I'm dead
3075689280: I'm alive
应该是对的。
因为我不使用pthread_join
,但为什么它可以打印三行;
答案 0 :(得分:2)
您观察到对共享资源的无保护并发访问的奥秘,在这种情况下是缓冲的stdout
。
使用互斥锁保护stdout
免受并发访问,并且一切都将按预期工作:一个printf()
语句将匹配一条打印的行。
但是你的程序冒险在线程结束之前main()退出,这样结束程序可能会在随机位置销毁线程。