2012-12-19 2 views
8

プロセス内に約300個の追加スレッドを作成しています。 スレッドIDに基づいて特定のスレッドに参加する方法はありますか?特定の追加スレッドに参加する

+3

どのようにこれらのスレッドを管理していますか? (あなたはどういうわけか、スレッドを覚えていますか?) –

答えて

9

天国はあなたがどのようにboost::threadを保存するかによって異なります。あなたは(T = boost::thread*付き)の容器に保存した場合、あなたがどこかのスレッドを保存し、ちょうどブーストdoesnのため、それは不可能ですポインタを保存せずにnew boost::threadを使用しない場合、あなたは単に、しかし

for(iterator it = ctn.begin(); it != ctn.end(); ++it){ 
    if(it->get_id() == join_thread_id){ 
     it->join(); 
     break; 
    }   
} 

のようなものを使用することができます自動的な簿記機能を提供しません。

1.備考:idを保存するには、boost::thread::idを使用する必要があります。
2.備考:std::map<boost::thread::id,boost::thread*>がこのようなタスクに便利です。

+1

または 'find_if(begin(ctn)、end(ctn)、[join_thread_id](iterator it){return it-> get_id()== join_thread_id;}); ' –

+0

スレッドがたくさんある場合、マップは良くありませんか?私はパフォーマンスを念頭に置いてこれを求めています。 –

+0

@ AdriC.S .:「たくさんの」の意味に依存します。引数の数(サブリニアルックアップの複雑さ)に応じてマップのサイズが変わりますが、実際の項目数によっては小さなベクトルが小さなマップよりも優れている可能性があります。 –

関連する問題