簡體   English   中英

boost :: lockfree :: queue not lockfree with c ++ 11?

[英]is boost::lockfree::queue not lockfree with c++11?

我試圖在此websocket ++示例boost::lockfree::queue替換為std::queue https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcast_server/broadcast_server.cpp

看起來它可以在沒有真正改變任何語法的情況下完成,同時刪除boost::unique_lock行。

但是,當我查看boost示例時,它有一個代碼部分,用於檢查lockfree http://boost-sandbox.sourceforge.net/doc/html/lockfree/examples.html

當我查看lockfree::queue上的文檔時,它會在is_lock_free() http://boost-sandbox.sourceforge.net/doc/html/boost/lockfree/queue.html上說明

bool is_lock_free(void)const;

警告

它只檢查隊列頭尾節點和空閑列表是否可以無鎖方式修改。 在大多數平台上,如果這是真的,整個實現是無鎖的。 使用c ++ 0x-style原子,不可能提供完全准確的實現,因為需要測試每個內部節點,如果從操作系統分配更多節點,這是不可能的。

返回 :如果實現是無鎖的,則返回 true。

我不知道“c ++ 0x-style atomics”是什么,但我很確定c ++ 0x意味着c ++ 11。

我正在使用c ++ 11並且只是將boost::lockfree::queue替換為std::queue ,所以這不會實現lockfree嗎?

否。“不可能提供完全准確的實現”注釋引用is_lock_free() - 即不能保證is_lock_free()返回一個准確反映實現是否無鎖的結果。 但是,如果is_lock_free()返回true,那么實現很可能是無鎖定的 - 但不是絕對的,鑄鐵保證。

我不知道“c ++ 0x-style atomics”是什么,但我很確定c ++ 0x意味着c ++ 11。

  • c ++ 0x指的是c ++ 03和/或c ++ 07 C ++標准。
  • c ++ 1x通常指c ++ 11
  • c ++ 1y是指c ++ 11的繼承者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM