1

LinuxでCでコードを書いています。

コードでは、最初に 50 個のスレッドを生成し、その後、各スレッドがさらに 1、2、または 3 個のスレッドを生成します。

私の問題は、スレッドの 1 つが作業を完了すると (この状況では、他のスレッドの一部がまだ開始されていない可能性があります)、その ID をスレッドプールに返すことです。

したがって、残りのスレッドが開始されると、以前のスレッドがスレッド プールに戻したスレッド ID と同じになる可能性があります。

私はこれをしたくありません。一意のスレッド ID が必要です (返された ID が残りのスレッドによって再度取得されないようにするため)

4

1 に答える 1

4

一意のスレッドIDとスレッドプールを同時に持つことはできないと思います-スレッドプールの要点は、スレッドが後でより多くのタスクに再利用され、スレッドができないことです(AFAIK)作成後にスレッド ID を変更します。

したがって、選択肢は次のとおりです。

(a) スレッドプールの使用を停止し、新しいスレッドが必要になるたびに生成します (タスクが完了したらスレッドを終了させます)。これにより、通常は新しいスレッド ID が得られますが、利用可能なスレッド ID の数が限られているという理由だけで、OS は最終的にスレッド ID の再利用も開始することに注意してください。

また

(b) スレッド ID が再利用されないようにプログラムを修正します。可能であれば、スレッド ID をまったく見ないようにプログラムを変更してください。たとえば、プログラムが完了する必要があるタスクの ID としてスレッド ID を使用している場合は、代わりにアトミック (またはミューテックスで保護された) カウンターをインクリメントして生成するタスク ID に置き換えます。

于 2013-03-31T07:13:13.763 に答える