• ベストアンサー

pthreadの使い方

現在、pThreadを利用して、Windows とubuntu上で、テストしています。 そこで、質問なのですが、例えばCPU4つのコンピューターに10個の重たい処理をする場合。 CPUをフルに使うために、まず4つのスレッドを作り、処理が早くおわったものから、次の処理をさせたいのですが、書き方がピンといまいちきません。教えていただけませんか? むしろ最初から10個のスレッドを作成したほうがいいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

4個のスレッドを切るか、10個を切るかは自由だと思います。 が、CPUがQuad=4だから4ってのは、違うとは思いますが。 それ以外の処理にも、CPUパワーをまわすために、3個くらいでとめても いいかもしれません。。 MutexとSemaphoneを使い分けですね。 ミューテックスが設定されている部屋で 終わっていないタスクを探して、 その時点で開いているスレッドを検索 どのスレッドがそれを担当したとフラグを書いておき セマフォでそのスレッドをアクティブ化  =そのスレッドは、終わっていないタスクを1つ処理開始 ミューテックス開放 スレッドは、最後に、ミューテックスルームで 終わっていないタスクのエントリに「完了」的フラグに書き換えて ミューテックス開放+セマフォウエイトに戻る。 後は、メインタスクで全部の、 「終わっていないタスク」リストを監視するだけ という流れになると思います。 こうしておけばDefineなどで、スレッドを切る量を後からでも変更できるので トータルで、多いときが早いシステムなのか? 少ないスレッドのほうが早いのか?を簡単に実験できますから。 と言う感じではいかがでしょうか? が、スタックを結構消費するので、 メモリを使いすぎると、スワップにされると厄介なので、 あまり増やしすぎるのは、私は好きではないですね。 環境にもよるでしょうけど。

kenpanch7
質問者

補足

ご回答ありがとうございます。 もし参考になるサンプルのリンク等あったらおしえていただけませんか? 恥ずかしながら、セマフォと、ミューテックスについて少しは調べたものの、排他処理をする ということぐらいしか知っていませんでした。

関連するQ&A