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

1番目と2番目は説得力があります。しかし、誰でも3番目のオプション出力の背後にある理由を説明できます。

4

1 に答える 1

0

あなたのプログラムは2つのスレッドを作成しないと確信しています;-)

stdoutほとんどの場合、新しいスレッドとメインスレッドの間 で競合状態の影響が見られます。exitすべてのストリームをフラッシュして閉じます。これは、非アトミックに、他のスレッドが同じストリームバッファーに書き込み、それをファイル記述子にもフラッシュするのと並行して発生する可能性があります。

于 2012-11-11T11:28:00.737 に答える