9

我试图在这个 websocket++ 示例中boost::lockfree::queue替换https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcast_server/broadcast_server.cppstd::queue

看起来它可以在不真正改变任何语法但删除boost::unique_lock行的情况下完成。

但是,当我查看 boost 示例时,它有一个代码部分检查无锁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) 常量;

警告

它只检查是否可以以无锁方式修改队列头和尾节点以及空闲列表。在大多数平台上,如果这是真的,整个实现是无锁的。使用 c++0x 风格的原子,不可能提供完全准确的实现,因为需要测试每个内部节点,如果从操作系统分配更多节点,这是不可能的。

返回:true,如果实现是无锁的。

我不知道“c++0x 风格的原子”是什么,但我很确定 c++0x 意味着 c++11。

我正在使用 c++11 并且只是替换boost::lockfree::queuestd::queue所以这不会实现无锁吗?

4

2 回答 2

8

不。“不可能提供完全准确的实现”评论是指is_lock_free()- 即不能保证is_lock_free()返回准确反映实现是否无锁的结果。但是,如果is_lock_free()返回 true,则该实现很可能是无锁的——但不是绝对的,保证铸铁。

于 2013-03-10T19:40:54.800 回答
-7

我不知道“c++0x 风格的原子”是什么,但我很确定 c++0x 意味着 c++11。

  • c++0x 指的是 c++03 和/或 c++07 C++ 标准。
  • c++1x 通常指的是 c++11
  • c++1y 指的是 c++11 的后继者。
于 2013-09-02T09:08:41.803 回答