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

时间:2013-03-10 19:06:10

标签: c++ boost c++11 queue lock-free

我正在尝试用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吗?

2 个答案:

答案 0 :(得分:8)

没有。 “不可能提供完全准确的实现”注释引用is_lock_free() - 即不保证is_lock_free()返回准确反映实现是否无锁的结果。但是,如果is_lock_free()返回true,那么实现很可能是无锁定的 - 但不是绝对的,铸铁保证。

答案 1 :(得分:-7)

  

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

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