以下代码创建一个打印“新线程”的线程。
#include<stdio.h>
#include<pthread.h>
void *thr_fn(void *arg)
{
printf("New thread\n");
sleep(5);
return (void *)1;
}
int main()
{
pthread_t pid;
void *t;
pthread_create(&pid,NULL,thr_fn,NULL);
printf("main thread\n");
exit(0);
}
输出可以是以下任何一种:
1.main thread
New thread
2.main thread
3.main thread
New thread
New thread
第一和第二是令人信服的。但任何人都可以解释第三个可选输出背后的原因。
答案 0 :(得分:0)
我很确定,你的程序没有创建两个线程; - )
您很可能在新线程和主线程之间看到stdout
上的竞争条件的影响。 exit
刷新并关闭所有流。这可能是非原子的,并且与写入同一个流缓冲区的其他线程并行,也可以与文件描述符一起刷新。