创建1个线程,输出“新线程”任意次数

时间:2012-11-11 11:00:04

标签: c pthreads

  

可能重复:
  Understanding pthread_detach

以下代码创建一个打印“新线程”的线程。

#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

第一和第二是令人信服的。但任何人都可以解释第三个可选输出背后的原因。

1 个答案:

答案 0 :(得分:0)

我很确定,你的程序没有创建两个线程; - )

您很可能在新线程和主线程之间看到stdout上的竞争条件的影响。 exit刷新并关闭所有流。这可能是非原子的,并且与写入同一个流缓冲区的其他线程并行,也可以与文件描述符一起刷新。