C++ 11の並行処理プリミティブを使用して、まともなwait_any実装がありますか?C++ 11の並行処理プリミティブを使用して、まともなwait_any実装がありますか?
またはそれをC++ 11のmutex、condition_variable、...で実装する方法は?
C++ 11だけでなく、ネイティブのLinuxシステムコールとpthreadを実装する際の一般的な考え方とアルゴリズムは何ですか?
...などミューテックスの
C++ 11の並行処理プリミティブを使用して、まともなwait_any実装がありますか?C++ 11の並行処理プリミティブを使用して、まともなwait_any実装がありますか?
またはそれをC++ 11のmutex、condition_variable、...で実装する方法は?
C++ 11だけでなく、ネイティブのLinuxシステムコールとpthreadを実装する際の一般的な考え方とアルゴリズムは何ですか?
...などミューテックスの
when_any
はC++ std
に存在しません。
通常、メッセージのプロデューサ - コンシューマキューを使用します。どのサフィアもキューにメッセージをキューイングできます(「準備ができました」など)。
多くのこのようなキューで待機しているスレッドは非常に複雑になります。
実際には、C++標準のプリミティブからビルドするため、クライアントコードで直接使用することはありません。
私は実際には 'queue'のことが大好きです。キューにインデックスを入れて、ベクトルのインデックスを使ってデータにアクセスしてfuture.get()を使用することができます – Adam
非常に実用的で、私はこれをお勧めしたいと思います回答。しかし、私はこれを行うには、指示や記事や本があれば、私に通知してください、それを行うことを学ぶしたいと思います。 – Adam
ここにはタスクのスレッドキューがあります:http://stackoverflow.com/a/30180853/1774667おそらくstackoverflowのどこかに 'threaded_queue
あなたが唯一のポーリングを持つことができます(ビジーウェイト)の実装をwait_anyが利用できるようにベクトル/アレイ内の任意の先物を待っている、または複数のcondition_variablesのいずれかが通知されると、待機中のスレッドをCPUから降格させるためにOS機能を使用しない場合は、条件変数を使用します。
また、OSの関与がなければ、強力なミューテックスや優先度の反転緩和などのことはできません。
投稿を更新し、コメントに詳細を追加しないでください。 –
Boost.Threadは、[when_any](http://www.boost.org/doc/libs/1_63_0/doc/html/thread/synchronization.html#thread.synchronization.futures.reference)を含むContinuationsを継承した先物を実装しています。 .when_any)。これがあなたの「まともな」概念を満たしているかどうかはわかりませんが、それは比較的よくテストされた実装です。しかし、この実装は厳密にはC++ 11プリミティブのみを使用しているわけではないので、コメントのみです。 – ComicSansMS
@ComicSansMSブーストによっては重すぎることがある。 1つを実装する方法に関する良い指示はありますか? (ネイティブのLinux APIであっても) – Adam