我正在尝试用boost::lockfree::queue
代替std::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;
警告
它只检查,如果队列头部和尾部节点和 freelist可以无锁方式修改。在大多数平台上, 如果这是真的,整个实现是无锁的。使用c ++ 0x-style 原子,没有可能提供完全准确的 实现,因为需要测试每个内部节点, 如果将从其中分配更多节点,这是不可能的 操作系统。
返回:如果实现是无锁的,则为true。
我不知道“c ++ 0x-style atomics”是什么,但我很确定c ++ 0x意味着c ++ 11。
我正在使用c ++ 11而只是用boost::lockfree::queue
代替std::queue
,所以这不会实现lockfree吗?
答案 0 :(得分:8)
没有。 “不可能提供完全准确的实现”注释引用is_lock_free()
- 即不保证is_lock_free()
返回准确反映实现是否无锁的结果。但是,如果is_lock_free()
返回true,那么实现很可能是无锁定的 - 但不是绝对的,铸铁保证。
答案 1 :(得分:-7)
我不知道“c ++ 0x-style atomics”是什么,但我很确定c ++ 0x意味着c ++ 11。