こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

pthreadの使い方

現在、pThreadを利用して、Windows とubuntu上で、テストしています。

そこで、質問なのですが、例えばCPU4つのコンピューターに10個の重たい処理をする場合。
CPUをフルに使うために、まず4つのスレッドを作り、処理が早くおわったものから、次の処理をさせたいのですが、書き方がピンといまいちきません。教えていただけませんか?

むしろ最初から10個のスレッドを作成したほうがいいのでしょうか?

投稿日時 - 2014-04-20 21:37:22

QNo.8562486

すぐに回答ほしいです

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

4個のスレッドを切るか、10個を切るかは自由だと思います。
が、CPUがQuad=4だから4ってのは、違うとは思いますが。
それ以外の処理にも、CPUパワーをまわすために、3個くらいでとめても
いいかもしれません。。

MutexとSemaphoneを使い分けですね。

ミューテックスが設定されている部屋で
終わっていないタスクを探して、
その時点で開いているスレッドを検索
どのスレッドがそれを担当したとフラグを書いておき
セマフォでそのスレッドをアクティブ化
 =そのスレッドは、終わっていないタスクを1つ処理開始
ミューテックス開放

スレッドは、最後に、ミューテックスルームで
終わっていないタスクのエントリに「完了」的フラグに書き換えて
ミューテックス開放+セマフォウエイトに戻る。

後は、メインタスクで全部の、
「終わっていないタスク」リストを監視するだけ

という流れになると思います。

こうしておけばDefineなどで、スレッドを切る量を後からでも変更できるので
トータルで、多いときが早いシステムなのか?
少ないスレッドのほうが早いのか?を簡単に実験できますから。

と言う感じではいかがでしょうか?

が、スタックを結構消費するので、
メモリを使いすぎると、スワップにされると厄介なので、
あまり増やしすぎるのは、私は好きではないですね。
環境にもよるでしょうけど。

投稿日時 - 2014-04-21 00:57:55

補足

ご回答ありがとうございます。
もし参考になるサンプルのリンク等あったらおしえていただけませんか?

恥ずかしながら、セマフォと、ミューテックスについて少しは調べたものの、排他処理をする
ということぐらいしか知っていませんでした。

投稿日時 - 2014-04-21 01:20:09

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問