sleep()
のような迂回路を使わずに他の命令に移る前にスレッドが作成されたことを確認する方法はありますか?スレッドの作成を待つ
私はこのようになりますループを持っている:base
は、配列へのポインタです
for(i = 0; i < NUM_THREADS; ++i)
{
if(pthread_create(&threads_id_array[i], NULL, ThreadFunction, &args))
{
perror("pthread_create() error");
exit(1);
}
args.base += args.offset;
}
。スレッドのargs.base
が正しい値を保持していることを確認できるように、スレッドがbase
のプロモーションの前に作成されていることを確認します。現在、これによりバグが発生しています。
スレッドによって 'args.base'が設定されていますか?スレッドが作成されていて、値を設定する時点まで実行されていることに違いがあるためです。 –
'pthread_create()'が0を返すと、スレッドは「作成されました」。しかし、それが実行を開始したのか、スケジュールされるのを待っているのかは別です。 'args.base'が作成されたか、何かを実行した場合にのみ更新されるようにしますか? 'args.base'がスレッドセーフな方法でアクセスされているようです(おそらくデータレース)。 [MCVE]を投稿してください。 –
@ColonelThirtyTwo、 'args.base'はメインスレッドによって設定され、作成されるスレッドでは設定されません。 – HeyJude