私はユーザー提供の関数を実行するためのpthreadを作成するC++アプリケーションを持っています。私はスレッドを終了するときに何らかの方法で警告を出して、スレッドを維持するために使用しているpthreadの配列からそのスレッドを削除できるようにしたいと考えています。これを行う方法はありますか、関数がちょうど "魔法の価値"を設定するべきかどうかです。 pthreadsを生成する私のメインコードは一種のrunloopにあるため、終了条件を簡単にチェックできます。pthreadが終了したときに関数を実行する
また、過負荷私のスレッドを追跡するために、無理std::vector<pthread_t>
を使用していますか?スレッドの数は必ずしも一定の定数ではなく、多くのスレッドまたは非常に少数のスレッドしか実行できません。または、これらの追加と削除に便利なもう1つのSTLコンテナがあります(常に片側に追加され、ほとんどどこでも削除されます)。 pthreadsを追跡するための他の構造がありますか?スタックやリストはここにありますか?寛大な最大の良い標準C配列ですか?問題の性質上、実行する必要があるユーザー関数を渡すワーカースレッドの固定サイズの配列を維持することもできます。これは良い解決策ですか?
ご迷惑をおかけして申し訳ありませんが、私はこれが問題になることのないような動的言語のスレッドでのみ作業しています。
EDIT(3/08/12): jojojapanの答え@読んだ後、私は一種のスレッドプールを使用することを決定しました。私の構造では、1つのプロデューサ(1つのスレッド)と多くのコンシューマ(プール内のワーカースレッド)があります。マルチスレッドの1つのプロデューサを多く消費するために作られたデータ構造はありますか?または、std::queue
にpthread_mutex_t
を使用してもよろしいですか?あなたが考慮する必要があります
「ユーザー提供機能を実行する」と言うと、スレッドfuncを書くのはあなたですか? – Duck
動的言語?あなたはGC言語を意味します;)。 –
@Duck:いいえ。私はライブラリを書いています。それを使用するプログラマは、これらの関数を書き込みます。 – Linuxios