2017-10-20 7 views
0

私はC++でProducer-consumer problemを使っています.OpenMPを使用しているときにモニタを実装する方法は何ですか?OpenMPを使用してC++でモニタを実装する方法は?

OpenMPではconditional_variableのようなものは見つからず、ウィキペディアの例のような特定の条件では待機/通知を実装できません。

+0

私がP-Cに合わないOpenMPでP-C問題をどのようにしたいのですか? – Surt

+0

あなたは正確に何をしたいですか?これは、openMP構造体だけを使って条件変数を実装できるかどうかを知るための学習の練習ですか? (それは自明ではありません)STL条件変数がない古代のシステムを使用しなければなりませんか?あなたはSTLについて聞いたことがありませんでしたか?ちょっとタイプしてください。 –

答えて

-1

私はOpenMPが条件変数を使用する手段を提供しているとは思わないので、実際にあなたの目的に合っていません。

OpenMPは条件変数の構成を提供しません。その目的は、マルチスレッドの科学アプリケーションに適しています。ここでは、問題を小さな部分に分割し、スレッドについて正確に考えることはありません。なぜなら、同期化はOpenMPのランタイムライブラリによって処理されるからです。

一部の実装では、pthreadをバックエンドとして使用するため、pthread_condファミリーファンクションを使用して回避することができます。しかし、これはデッドロックが発生しやすい(スレッドの作成方法や結合方法を制御することができないため)、同じツールの異なるバージョンでも移植可能ではない可能性があります。

あなたのケースでは、私は、プロデューサコンシューマキューを実装するために必要なすべてを含むC++標準スレッドライブラリを使用します。それでも並列プログラミングフレームワークに固執したいのであれば、Intelスレッドビルディングブロックは既にこのような種類のConcurrent Queuesを実装しているので、見てください。

+0

私は完全に同意しますが、「しないでください」はその質問に対する答えではありません。質問はあまりにも大きすぎてここで答えることはできません。 –

+0

私は十分にはっきりしないかもしれませんが、私の答えは「OpenMPでは完全にはできないし、他のオプションを使う方が良い」と答えました。しかし、フィードバックをありがとう。私はそれを明確にするために答えを更新します。 –

+0

私はmutexと条件変数をopenMPで完全に実装できると思いますが、試してみるつもりはありません。 –

関連する問題