在c++11中,boost::lockfree::queue不是lockfree的

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

本文关键字:lockfree queue 不是 boost c++11      更新时间:2023-10-16

我试图用boost::lockfree::queue代替std::queue在这个websocket++的例子https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcastrongerver/broadcastrongerver.cpp

看起来可以在不改变任何语法的情况下完成,但要删除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) const;

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

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

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

我正在使用c++11,仅仅用boost::lockfree::queue代替std::queue,所以这不会实现无锁吗?

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

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

  • c++0x指的是c++03和/或c++07的c++标准。
  • c++1x通常指c++11
  • c++1y指c++11的后继版本。