私はこののWebSocketでstd::queue
ためboost::lockfree::queue
を代用しようとしている++例https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcast_server/broadcast_server.cppはboost :: lockfree :: queueであり、C++ 11ではロックフリーではありませんか?
それは本当にboost::unique_lock
行を削除まだ構文を変更せずに行うことができるように見えます。私はブーストの例を見ると
しかし、それは私がlockfree::queue
上のドキュメントに目を通すときlockfree http://boost-sandbox.sourceforge.net/doc/html/lockfree/examples.html
をチェックするコード部分を持って、それがis_lock_free()
http://boost-sandbox.sourceforge.net/doc/html/boost/lockfree/queue.htmlでこれを言う:
bool is_lock_free(void)const;
キューの先頭と末尾ノードと 空きリストがロックフリーの方法で修飾することができる場合には、唯一のチェック
警告。ほとんどのプラットフォームでは、 実装全体がロックされていません。 C++ 0x形式の アトミックを使用すると、完全な正確な の実装を提供する可能性はありません。 オペレーティングシステムからさらにノードを割り当てる場合は不可能な、すべての内部ノードをテストする必要があります。
戻り値:実装がロックフリーの場合はtrue。
「C++ 0x形式のアトミック」は何もわかりませんが、私はかなり確信しています。
私はC++ 11を使用していて、std::queue
の代わりにboost::lockfree::queue
を単に置き換えているので、lockfreeは実装されませんか?
ロックフリーアルゴリズムにコミットする前に測定することをお勧めします。これらはきちんとしていますが、_scalable_と_safe_(つまり優先順位の逆転を防ぐ)に設計されています。たとえば、いくつかのコアと非常に多くの競合がない限り、Boostのロックフリーキュー実装はロックされた 'std :: queue'よりも遅くなります。 –
'C++ 0x形式のアトミックが何であるか分かりません。[boost :: atomic](http://www.boost.org/doc/libs/1_53_0_beta1/doc/html/atomic)について語っています。 html)を参照してください。 –
+1のlibの例 – ExoticBirdsMerchant