-1

私はマルチスレッドに不慣れで、「unix環境での高度なプログラミング」に従っています。スレッドが実行される順序を取得できません。私は次のコードを持っています。

int err1 = pthread_create(&first, NULL, disp, a);
int err2 = pthread_create(&second, NULL, disp, b);
int err3 = pthread_create(&third, NULL, disp, c);

ただし、3番目のtidに関連するスレッドが最初に実行され、次に2番目、最後に最初に実行されます。これが動作なのか、何か問題があるのか​​わからない。

どうも!ラフル。

4

3 に答える 3

3

それは決定論的ではありません。スレッドは並列で実行されるため、プロセッサとハイパースレッディングの数によって異なります。それらを特定の順序で使用する場合は、同期ポイントを使用する必要があります。開始すると、すべてのスレッドが独自の速度で独立して実行されます。

于 2012-10-03T14:51:15.877 に答える
2

コードが作成された後の実行順序については保証されません。
保証できるのは、スレッド3がスレッド2の後に作成され、スレッド2がスレッド1の後に作成される
ことだけです。スレッド1で特定のコードが実行された後にのみ、スレッド2が生成されることを予測または想定することはできません。そのようなことを達成するには、スレッド同期を提供する必要があります。

于 2012-10-03T14:51:25.473 に答える
0

プログラムは1つのスレッドで実行され、さらに3つのスレッドを作成します。保証できるのは、他の3つのスレッドが作成される順序と、それらがいずれかの段階で実行されることだけです。OSはメインスレッドを停止し、新しいスレッドを作成時に順番に完了することができます。メインプログラムがスレッドの作成を完了したら、スレッドのスタックの一部にそれらを貼り付けて後で確認することができます。重要なのは、あなたは本当に知らないということです。

これらの3つのスレッドを順番に実行し、次のスレッドが開始する前に完了する必要がある場合は、基本的に、そもそもスレッドを使用しないようにする必要があります。

于 2012-10-03T15:13:37.740 に答える