1

可能重复:
了解 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

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

4

1 回答 1

0

我很确定,您的程序不会创建两个线程;-)

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

于 2012-11-11T11:28:00.737 回答