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

9 c++ queue boost lock-free c++11

我试图取代boost::lockfree::queuestd::queue在此的WebSocket ++例子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::queuestd::queue,所以这将无法实现lockfree?

Phi*_*all 8

不可以."不可能提供完全准确的实现"评论指的是is_lock_free()- 即不能保证is_lock_free()返回准确反映实现是否无锁的结果.但是,如果is_lock_free()返回true,那么实现很可能是无锁定的 - 但不是绝对的,铸铁保证.