問題タブ [packaged-task]

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.

0 投票する
0 に答える
35 参照

c++ - scoped_lock を使用して、相互排除でキューから packaged_task を抽出した後に実行する

scoped_lock を使用して 2 つのミューテックスをロックした後、キューから抽出されたタスクを実行する必要があります。問題は、タスクをキューから別のタスクにスワップしてから実行することです。これまでのところ、これが私の出発点です

しかし、タスクを変数に保存して後で実行することはできません。

0 投票する
0 に答える
54 参照

c++11 - std::packaged_task のクラッシュの検出

パッケージ化されたタスクが正常に完了したかどうかを検出したいのですが、タスクのエラーが原因でスレッドがクラッシュするというエッジケースがいくつかあります (一部のサードパーティコードから)。これらの場合、以下のコードでは例外がキャッチされず、スレッドがクラッシュしたことを知ることができません。future_status は、クラッシュ時に準備完了として設定されます。ただし、スレッドに参加する前に .get() で結果を取得しようとすると、future は内部で _M_state->wait を呼び出した後に中止されます。内部的には、未来の _M_state._M_result がガベージで満たされていることがわかります。

タスクが正常に完了したかどうかを判断する方法を考えられる人はいますか?

終わり

0 投票する
0 に答える
162 参照

multithreading - std::packaged_task と std::function の動作

私の質問は、C++ 11 での ThreadPool クラスのこの実装からのものです。以下は、コードの関連部分です。

  1. が threadPool オブジェクトで呼び出されるたびenqueueに、渡された関数と渡されたすべての引数をバインドして、shared_ptrofを作成しstd::packaged_taskます。
  1. futurethisから を抽出std::packaged_taskして呼び出し元に返し、これtaskを a に格納しstd::queue<std::function<void()>> tasks;ます。

  2. コンストラクターでは、キュー内のタスクを待機し、見つかった場合はタスクを実行します。

さて、これに基づいて、私の質問は次のとおりです。

  1. std::packaged_taskに格納されている場合は、オブジェクトにstd::queue<std::function<void()>>なるだけですよね? それでは、以前に抽出されstd::functionた共有状態にどのように書き込むのでしょうか?std::future

  2. ストアドstd::packaged_taskが単なるstd::functionオブジェクトではなく、ラムダ (コンストラクター内のコード) を介して実行さstd::packaged_taskれる場合でも、別のスレッドで実行されないのはなぜですか? 別のスレッドで実行されるはずですよね?std::threadtask()std::packaged_task

私の質問が示唆するように、私は への変換と の共有状態への書き込み機能を理解std::packaged_taskできませstd::functionん。このコードを n 個のスレッドでテストしたときはいつでも、取得できるスレッド ID の最大数は n でしたが、n を超えることはありませんでした。完全なコードは次のとおりです (のコードと、作成されたスレッドの数をカウントする main 関数も含まれています)。std::functionstd::futureThreadPool