在这个boost::lockfree::queue示例中,我试图用std::queue代替server.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; 警告 它只检查队列头和尾节点以及自由职业者是否可以以无锁的方式进行修改。在大多数平台上,如果这是真的,整个实现都是无锁的。使用c++0x风格的atomics,不可能提供完全准确的实现,因为需要测试每个内部节点,如果从操作系统分配更多的节点,这是不可能的。 如果实现是无锁的,返回:true。
我不知道什么是“c++0x样式的原子”,但我很确定c++0x是指c++11。
我使用的是c++11,只是用boost::lockfree::queue来代替std::queue,所以这不会实现为无锁吗?
发布于 2013-03-10 19:40:54
不是的。“不可能提供完全准确的实现”的注释指的是is_lock_free() --即不能保证is_lock_free()返回准确反映实现是否没有锁的结果。但是,如果is_lock_free()返回true,很可能实现是无锁的--但不是绝对的,铸铁是有保证的。
发布于 2013-09-02 09:08:41
我不知道什么是“c++0x样式的原子”,但我很确定c++0x是指c++11。
https://stackoverflow.com/questions/15326282
复制相似问题