私はC++を初め、Pythonの長い背景から来ています。C++でのPythonライクなマルチプロセッシング
私はC++で並列に関数を実行する方法を探しています。私はstd::async
についてたくさん読んでいますが、それでも私にとってはそれほど明確ではありません。
Message from main.
Async call
しかし、時には、私はこのような何かを得る:私は時々、出力は私が期待したものであることを複数回実行した場合
次のコードは、いくつかの本当に面白いこと
#include <future> #include <iostream> void called_from_async() { std::cout << "Async call" << std::endl; } int main() { //called_from_async launched in a separate thread if possible std::future<void> result(std::async(called_from_async)); std::cout << "Message from main." << std::endl; //ensure that called_from_async is launched synchronously //if it wasn't already launched result.get(); return 0; }
を行います:
MAessysnacg ec aflrlom main.
なぜ
cout
が最初に起こるのですか?cout
の後に.get()
メソッドを呼び出すことは明らかです。パラレル実行について。
#include <future> #include <iostream> #include <vector> int twice(int m) { return 2 * m; } int main() { std::vector<std::future<int>> futures; for(int i = 0; i < 10; ++i) { futures.push_back (std::async(twice, i)); } //retrive and print the value stored in the future for(auto &e : futures) { std::cout << e.get() << std::endl; } return 0; }
twice
機能へのすべての10回のコールが同時に別々のコア上で実行されます場合、私はこのようなコードがありますか?そうでない場合は、Python マルチプロセス libのようなC++に類似のものがありますか?
主に私が探しています何:
私は関数を記述し、マルチプロセッシングと入力のn個の数とそれを呼び出しますか?同時にn個のノードに対して関数を1回実行します。
'std :: cout'は内部的に同期されているので、結果は**発生しません**。これは実際にあなたが見ている正確な結果ですか?もしそうなら、それはコンパイラのバグです。 - もう1つのコメントは、投稿しているコードに行番号を追加しないでください。他の人がコピー&ペーストしてコードを試してみるのは難しくなります。 –
** 1 **について:あなたはパラレルで物事を実行したい、そしてパラレルで走っているときにあなたは驚いていますか? – Biffen
@Biffen私は驚くことではありませんが、最初の 'cout'は並列ではなく、並列プロセスは' cout'の後にのみ呼び出されます。それは混乱しているものです。 –