boost::thread クラスには、「非スレッド」を与えるデフォルトのコンストラクターがあります。
boost::thread t1;
良い?コードの後半で実行する関数を指定できますか?
そして別の質問:
段階的なアーキテクチャ (SEDA) を持つ小さなサーバーを作成しようとしています。各段階には多数のワーカー スレッドがあり、段階はイベント キューに接続されています。次のようにboost::thread_groupを使用して4つのワーカースレッドでプールを作成すると:(ここでクリーンアップするためにキューの条件変数を削除しました。また、キューのサイズが常に4Nであると仮定しています。)
boost::thread_group threads;
while(!event_queue.empty())
{
for(int i = 0; i < 4; ++i)
{
threads.create_thread(event_queue.front());
event_queue.pop();
}
threads.join_all();
}
thread_group はサイズが大きくなり続けます。終了したグループ内のスレッドはどうなりますか?また、これらのスレッドを再利用して、thread_group のサイズを 4 に保つにはどうすればよいですか?
私はこの質問を見て、上記のコードの代わりにこれを使用しました:
std::vector<boost::shared_ptr<boost::thread>> threads;
while(!event_queue.empty())
{
for(int i = 0; i < 4; ++i)
{
boost::shared_ptr<boost::thread>
thread(new boost::thread(event_queue.front());
event_queue.pop();
threads.push_back(thread);
}
for(int i = 0; i < 4; ++i)
threads[i]->join();
threads.clear();
}
違いは何ですか?どちらがより良いパフォーマンスを持っていますか?メモリリークは発生しますか?または、スレッドの単純なプールを作成する別の方法はありますか?
助けていただければ幸いです。どうもありがとうございました。