首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boost:: lockfree ::queue是不是c++11中没有锁的?

boost:: lockfree ::queue是不是c++11中没有锁的?
EN

Stack Overflow用户
提问于 2013-03-10 19:06:09
回答 2查看 5.7K关注 0票数 9

在这个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,所以这不会实现为无锁吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-10 19:40:54

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

票数 8
EN

Stack Overflow用户

发布于 2013-09-02 09:08:41

我不知道什么是“c++0x样式的原子”,但我很确定c++0x是指c++11。

  • c++0x指的是c++03和/或c++07 C++标准。
  • c++1x通常指的是c++11
  • c++1y指的是c++11的继承者。
票数 -7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15326282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档