0

テストpthread用のcプログラムを作成します(cygwinを使用)結果は次のようになると予想していました

スレッド 1 スレッド 1 スレッド 2 スレッド 2 スレッド 1 ....

またはその近くにあるものは、両方のスレッドが並行して動作することを示していますが、結果はスレッド1スレッド1スレッド1スレッド1スレッド1スレッド2スレッド2スレッド2スレッド2スレッド2 T1 = 0、T2 = 0

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *funa();
void *funb();

int main()
{
  //create thread
  pthread_t thread1, thread2;
  int T1=pthread_create( &thread1, NULL, funa, NULL);
  int T2=pthread_create( &thread2, NULL, funb, NULL);

  //join thread
  pthread_join( thread1, NULL);
  pthread_join( thread2, NULL); 

  //return 0 if sucess
  printf("T1=%d , T2=%d",T1,T2);
exit(0);
}
void *funa()

{int i;
for (i=0;i<5;i++)
printf("thread 1\n");

}
void *funb()

{int j;
for (j=0;j<5;j++)
printf("thread 2\n");

}
4

1 に答える 1

0

他のコメントで既に対処されている質問の詳細から離れて、スレッドで何らかの順序が必要なようです。

その場合は、 for ループ内にpthread_barrier_wait()( details ) を追加することを検討してください。バリアへのすべての呼び出しは、予想されるすべてのスレッドがバリアを呼び出すまでブロックされます。でバリアを初期化するときに、待機するスレッドの数を設定する必要がありますpthread_barrier_init()

于 2013-07-08T01:10:04.077 に答える