電子書籍の厳選無料作品が豊富!

現在赤黒木の改良を考えているのですが、赤黒木におけるノードの挿入操作は、ノードが多くなるとリバランスに非常に時間がかかります。

そこで、プログラム内で挿入操作が必要となった時に、挿入操作を行うスレッド(もしくはプロセス)を新規で作成し、挿入に関してはそのスレッド、その他は元のスレッドが実行というように並列で行いたいのですが、どのようにスレッドを作れば良いか分からない為、教えてください。

挿入における排他制御(フラグ管理)などのアルゴリズムの部分は勉強したので、スレッドの作成方法が知りたいです。また、再帰を頻繁に行うプログラムなので、スレッド作成数の上限も設定したいです。

参考にしている論文
http://uc.alerta.cl/xmlui/bitstream/handle/12345 …

なお、開発環境はVisual C++ 2012で、OpenMPも使用できます。ただオブジェクト指向に慣れていないため、ほとんどC言語で書いています。


以下に、簡単なソース、及び図を載せますので、お手数をおかけしますがアドバイスをいただけないでしょうか?

(簡単なソース)
main(){
x = f1();
}
int f1(){
if() y = f1(); //再帰を頻繁に行います
if() insert(); //挿入はスレッドを新規に作成し、元のスレッドと並列で実行(複数の挿入スレッドが同時に存在しうる)
return y;
}

p.s.
同じ内容の質問をyahoo知恵袋でも出しているのですが、回答してくれた方への質問に答えたりが出来ない為、こちらに転載させていただきました。

また、CreateThread()で実現できそうというアドバイスも頂けたのですが、もう少し具体的な実装方法が調べても分からなかったので、その点に関してのアドバイスでも十分ですので、よろしくお願い致します。

「C++における並列処理に関する質問です。」の質問画像

A 回答 (11件中11~11件)

複数ノードの挿入って, 並行してできるんだっけ?



逐次処理にしかならないんだったら, スレッドにしても何もうれしくないんじゃないかなぁ.

この回答への補足

添付のサイトは今年発表された並列処理の赤黒木アルゴリズムの論文でして、逐次処理でなくロックを用いることで並列処理可能なアルゴリズムになっています。

補足日時:2012/12/15 23:29
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!