問題タブ [ppl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ 同時実行::concurrent_vector
スレッドを使用しているときに、次のコードで問題が発生しています。
Microsoft のサイトで、 への追加concurrent_vector
はイテレータを混乱させないことを読んだのでmutex
、操作中は and を提供しませんでしたfind_if
。
だから私が受け取っているエラーは「アクセス違反」です
6 つのスレッドを同時に実行しています。これを でラップする必要がありmutex
ますか? 必要ですか。私はC ++にかなり慣れていません。
c++ - C++ REST SDK: 非同期タスクと C++11 マルチスレッド
これは、C++ REST SDK の非同期タスク機能に関する概念的な質問です (また、少し初歩的な質問でもあるかもしれません)。
基本的なアプリケーションでは、クライアントがあり、いくつかのリクエストを実行します。
(foo ループは、リクエストが頻繁に送信されることを示すためのものであり、コードでは実際には使用しません)。
質問:
私が理解している限りでは、非同期タスク ライブラリはこれらの着信要求を並列に処理します。つまり、メイン スレッドがすべてのタスクをイベントのような方法で処理するのではなく、ライブラリがいくつかの基になるスレッド プールにタスクを割り当てます。 (--私には透明ではありません--) 方法。私はそれを正しく理解しましたか?
前の見解が正しければ、REST SDK を C++ のマルチスレッド機能と組み合わせる理由はあります。たとえば、上記のループをもう一度取り上げると、10 個のスレッドを開始し、それぞれのプロセスで 10 回のループ反復を実行します。これは理にかなっていますか、それとも不要ですか?
さらに、一般的に、C++11 のマルチスレッド機能によって ppl 機能を組み合わせる必要がある一般的なパターンはありますか? それとも、内部の REST SDK と ppl がより良い仕事をしてくれると信頼しても安全でしょうか?
(情報: cpprest ディスカッション ページでもこの質問をしました。ただし、このフォーラムはもう維持されていないようです。)
c++ - concurrency::parallel_for のコア数を定義する
(Windows)concurrency::parallel_for
から使用しています。ppl.h
使用する必要があるコアの数を指定できますか? または少なくともコアの最大数?
delphi - Delphi - 並列プログラミング ライブラリの IFuture を使用して大きなファイルを読み込む
ロードに「年齢」がかかる大きな(っぽい)Excelファイルを読み込んでいます。実際にアクセスする必要がある前にロードできます。したがって、これは Parallel Programming Library の IFuture に適していると思いました。しかし、「未来」の例はすべて、文字列、整数などの単純な型のみをカバーしているため、どうすればよいかわかりません。
非並列コードは次のとおりです。
"xls" は Excel オブジェクト、"s" はメモリ ストリームです。
これについて「未来」はどのように進むでしょうか?xlsを次のように宣言しますか...
これは正しいです。もしそうなら、それは現在インターフェースであるため、通常の TsmXLSFile のように解放する必要がありますか?
スティーブ
c++ - イテレータ内のプロキシ オブジェクト
特定のクラスに属するアイテムの大きなベクトルがあります。
同じものclass_id
がベクトルに複数回出現する可能性があり、ベクトルは一度構築されてから でソートされclass_id
ます。したがって、同じクラスのすべての要素は、ベクトル内で隣り合っています。
後でクラスごとにアイテムを処理する必要があります。同じクラスのすべてのアイテムを更新しますが、別のクラスのアイテムは変更しません。すべてのアイテムに対してこれを行う必要があり、コードは簡単に並列化できるため、Microsoft PPL を で使用したいと考えましたConcurrency::parallel_for_each()
。class_id
したがって、イテレータが必要であり、特定のas プロキシ オブジェクトを持つすべてのアイテムの範囲を返すフォワード イテレータを考え出しました。プロキシは単なる astd::pair
であり、プロキシは反復子の値の型です。
今では、すべてのクラスをループして、このようにアイテムを更新することができました。
コードで置き換えるstd::for_each
とクラッシュしました。Concurrency::parallel_for_each
デバッグ後_Parallel_for_each_helper
、ppl.h の 2772 行目以降にある次のコードに問題があることがわかりました。
postincrement を使用し (一時イテレータが返されるため)、その一時イテレータを逆参照し、逆参照されたアイテムのアドレスを取得します。これは、一時オブジェクトの逆参照によって返されたアイテムが存続する場合にのみ機能します。基本的に、コンテナを直接指している場合。したがって、クラスごとのstd::for_each
作業ループを for ループに置き換える必要がありますが、これを修正するのは簡単です。
私の質問は、私が行った方法でプロキシ オブジェクトを返すことが標準に違反しているかどうか、またはすべてのイテレータが永久データに逆参照するという仮定が Microsoft によってライブラリ用に作成されているが、文書化されていないかどうかです。parallel_for_each()
少なくとも、ランダム アクセスまたはフォワード イテレータのいずれかが期待されることを除いて、イテレータ要件に関するドキュメントは見つかりませんでした。前方イテレータとベクトルに関する質問を見てきましたが、イテレータの参照型が であるためconst value_type&
、イテレータは標準で問題ないと思います。では、プロキシ オブジェクトを返す前方イテレータは依然として有効な前方イテレータなのでしょうか? または別の言い方をすれば、イテレータが実際にコンテナのどこかに格納されている型とは異なる型の値を持っていても大丈夫ですか?
コンパイル可能な例:
c++ - Concurrency::parallel_for VS2015 SP2
ソフトウェアで parallel_for を使用して、いくつかの作業の同時実行を簡単に実行しています。今、私はhttps://msdn.microsoft.com/en-us/library/hh409293(v=vs.140).aspx破壊的変更 + https://blogs.msdn.microsoft.com/vcblogのブログで読まれました/2015/07/14/stl-fixes-in-vs-2015-part-2/そして心配が始まります。
- parallel_for 内で同期オブジェクトを使用できないということは、少なくともすべてが OS 同期プリミティブに基づいているということですか? 答えが「はい」の場合、MS は parallel_for 内で何かを同期することをどのように期待していますか?
- OS スケジューラーと ConRt スケジューラーの間にデッドロックが発生する状況で、ブログにどのように説明されているかを知っている人はいますか? 誰かがこのデッドロックに直面しましたか? これが本当なら、parallel_for は完全に無意味になります。
お返事ありがとうございます!
c++ - shared_ptr と new 演算子: どちらを使用するか
以下の関数ではhttp_client
、cpprestsdk ( https://github.com/Microsoft/cpprestsdk ) を利用して、ネットワーク カメラへの http 要求を作成しました。以下の関数は、おそらく、特定のリクエストが行われたときにlcm ライブラリ ( http://lcm-proj.github.io/ )によって呼び出されるコールバックです。
11 行目に問題がありました。以前は new 演算子を使用していました。
ポインターを作成し、関数を終了する直前に手動で削除します。init_session_response
しかし、49 行目の pplx タスクの継続でオブジェクトを変更しようとすると、アクセス違反の例外が発生しました。
std::shared_ptr を使い始めると、この問題はなくなりました。shared_ptr を使用することで問題が解決した理由を説明してもらえますか? http_client* も std::shared_ptr を使用して作成する必要がありますか?
c++ - Visual C++: 並列パターン ライブラリ - ファクトリ メソッドによって返されたタスクをキャンセルする方法は?
MSDN によると、次のようにタスクをキャンセルできます。
しかし、そのようなファクトリメソッドによって返されたタスクをキャンセルするにはどうすればよいですか: