![](/img/trans.png)
[英]Is it safe to use boost::lockfree with c++11 thread support library?
[英]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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.