9

このwebsocket ++boost::lockfree::queueの例で代用しようとしています https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcast_server/broadcast_server.cppstd::queue

構文を実際に変更せずにboost::unique_lock行を削除することなく実行できるようです。

ただし、ブーストの例を見ると、ロックフリーをチェックするコードセクションがありますhttp://boost-sandbox.sourceforge.net/doc/html/lockfree/examples.html

のドキュメントを見ると、 http://boost-sandbox.sourceforge.net/doc/html/boost/lockfree/queue.htmllockfree::queueで次のように書かれています。is_lock_free()

bool is_lock_free(void) const;

警告

キューのヘッドノードとテールノード、およびフリーリストをロックなしで変更できるかどうかのみをチェックします。ほとんどのプラットフォームでは、これが当てはまる場合、実装全体がロックフリーです。c++0x スタイルのアトミックを使用すると、すべての内部ノードをテストする必要があるため、完全に正確な実装を提供する可能性はありません。これは、オペレーティング システムからさらにノードが割り当てられる場合には不可能です。

戻り値: true (実装がロックフリーの場合)。

「c++0x スタイルのアトミック」とは何かはわかりませんが、c++0x が c++11 を意味することは確かです。

私は c++11 を使用していて、単に を置き換えboost::lockfree::queueているだけstd::queueなので、これはロックフリーで実装されませんか?

4

2 に答える 2

8

いいえ。「完全に正確な実装を提供する可能性はありません」というコメントは、つまり、実装がロックフリーであるかどうかを正確に反映する結果を返すis_lock_free()ことが保証されていないことを示しています。is_lock_free()ただし、is_lock_free()true が返された場合、実装がロックフリーである可能性はかなり高いですが、完全に保証されているわけではありません。

于 2013-03-10T19:40:54.800 に答える