2

関数を使用して1000個のスレッドを作成しようとしていpthread_create()ます。

これは私が使用しているステートメントです:

for (int i=0 ; i <1000; i++)
{
   retValue = pthread_create(&threadId, NULL, simplethreadFunction, NULL);
}

このforループを実行するたびに、新しいスレッドが作成されますか?

これは簡単なことです。しかし、私はそれを理解することができません。

4

1 に答える 1

4

この for ループが実行されるたびに、新しいスレッドが作成されますか?

はい、そうです。

これは簡単なことです。しかし、私はそれを理解することができません。

さらにいくつかの点を追加します。

  1. 関数 pthread_create の最初のパラメーターは、pthread_t へのポインター型です。基本的に、この関数が「何か」を割り当てるために使用するアドレスをこの関数に渡します。

    この関数がスレッドを作成すると、このスレッドの「不透明な一意の識別子」が作成され、渡したポインターがこの場所を指すように作成されるため、後で必要に応じてアクセスできます。

  2. 同じポインターを 1000 回渡す場合、毎回前の値が上書きされるため、すべての 1000 のうち作成された 1 つ (最後のスレッド) のスレッドの一意の識別子にアクセスできます。

  3. この一意の値は、スレッドでさらに操作 (結合など) を実行する場合に必要です。

  4. この関数およびその他のスレッド関連関数の詳細については、 thisおよびthis を参照してください。

  5. メイン コンテキストで pthread_exit を呼び出すことを忘れないでください。そうしないと、すべてのスレッドが終了する前に、完全なプログラム (作成されたスレッドを含む) が終了する可能性があります。

また、時間に関しては、私が考える限り、これは作成時間に影響を与えない可能性があり、作成したスレッドの使いやすさを低下させるだけです。また、今回計算している時間は、1000 スレッドを作成する時間ではなく、プラットフォーム/実装などの他の多くの要因に依存します。

于 2012-11-02T07:59:48.993 に答える