首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >is_lock_free()升级到MacPorts gcc 7.3后返回false

is_lock_free()升级到MacPorts gcc 7.3后返回false
EN

Stack Overflow用户
提问于 2018-04-13 12:20:13
回答 1查看 570关注 0票数 6

以前,使用AppleLLVM9.1.0,128位结构上的is_lock_free()已经返回true。为了获得完整的std::optional支持,我随后升级到MacPorts gcc 7.3。在我第一次尝试编译时,我遇到了一个臭名昭著的显示停止链接器错误:

代码语言:javascript
复制
Undefined symbols for architecture x86_64:
  "___atomic_compare_exchange_16", referenced from:

我知道我可能需要添加-latomic。使用Apple 9.1.0,我不需要它,而且我对此有很坏的预感。如果它是无锁的,通常不需要链接到任何附加的库,只有编译器才能处理它。否则,它可能只是基于锁的,并需要其他库的支持。正如我所担心的,在添加-latomic之后,构建成功了,但是is_lock_free()返回false。

我确实认为gcc 7.3和它的标准库的实现是好的。这可能只是我这边的一些配置问题。事实上,我没有做任何配置。我只是简单地安装了MacPorts gcc并完成了。知道我可能错过了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-13 14:26:45

我自己找到了答案,here

gcc7和以后的版本将调用libatomic而不是内联lock cmpxchg16b,并将从atomic_is_lock_free ( to mean)返回false,但至少在目前,在指令可用的目标上,lib原子实现仍然使用lock cmpxchg16b。(它甚至可以分割只读原子对象的错误,因此它实际上并不理想。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49816855

复制
相关文章

相似问题

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