在c++11中,boost::lockfree::queue不是lockfree的
is boost::lockfree::queue not lockfree with c++11?
我试图用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的后继版本。
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 将参数打包的参数传递到 std::queue 中,以便稍后使用不同的函数调用
- C++ queue.front();为什么不从第一个元素开始呢?
- 我可以擦除 std::queue 中间的节点吗?
- 获取大小时是否必须锁定 std::queue?
- 为什么我会收到"invalid conversion from 'Queue*/Stack*' to 'int'"错误消息?
- 销毁 std::queue 会导致内存错误
- 如何将一个 std::queue 的内容附加到另一个
- 使用元素加载 std::queue<uint8_t*> 的更有效方法?
- 为什么 std::queue 没有实现 insert() 而 std::d eque 实现了?
- boost::lockfree::spsc_queue and boost::asio
- 带有 std::vector 和 std::queue 的 Prim's 算法,我的代码有什么问题?
- 是boost :: lockfree :: Queue(在多线程程序中)可锁定
- 在 boost::lockfree:queue 默认构造函数的情况下断言失败
- boost::lockfree::queue允许的数据结构示例
- 如何将std::string放入boost::lockfree::queue(或备选方案)
- {错误 C2338: (boost::has_trivial_destructor:<T>:value)} 对于 boost::lockfree::queue 是什么意思?我在这里错过了什
- /boost/lockfree/queue.hpp:错误:静态断言失败:(boost::has_trivial_destructor<T>::value)
- 在c++11中,boost::lockfree::queue不是lockfree的
- 共享内存中的boost::lockfree::queue出现问题(boost1.53,gcc4.7.2/clang3.0