3

新しいC++11で、プロセスではなくスレッドが追加されたのはなぜだろうと思っていました。

プラットフォーム固有の関数のラッパーを実行できませんでしたか?

マルチプロセッシングを行うための最もポータブルな方法について何か提案はありますか?フォーク()?OpenMP?

4

3 に答える 3

3

これを移植可能に実行したい場合は、直接呼び出すのではなく、使用可能なシステムの組み合わせやシステムfork()にマップできる独自のライブラリ関数を作成することをお勧めします。注意が必要な場合は、関数にWin32と同じまたは類似のセマンティクスを持たせることができます。fork()exec()CreateProcess()

UNIXシステムは、Windowsベースのシステムと比較して、プロセスとプロセス管理に対してまったく異なるアプローチをとる傾向があるため、最も単純なラッパーを除くすべてを移植可能にすることは簡単ではありません。

もちろん、C ++ 11またはBoostを利用できる場合は、それを使い続けます。グローバルがなく(とにかく一般的には良いことです)、他の方法でデータを設定および共有しない場合、最新のシステムのスレッドとプロセスの実際的な違いはわずかです。作成するすべてのスレッドは、プロセスと同じように、互いに独立して進行できます。

メッセージパッシングがタスクまたはバッチスケジューラシステムに適している場合は、MPI実装を確認できません。

于 2012-05-15T14:16:58.403 に答える
3

Qtを使用できれば、QProcessクラスはプラットフォームに依存しないエレガントなソリューションになる可能性があります。

于 2012-05-15T14:21:31.020 に答える
0

BoostInterprocessを使用しています。

新しいプロセスを作成する可能性はありませんが、プロセスが存在すると、通信できるようになります。

この特定のケースでは、シェルスクリプトから必要なプロセスを作成できます。

于 2014-03-07T16:26:04.310 に答える