gpt4 book ai didi

c - gcc 的 __sync 和 __atomic 内在函数有什么区别

转载 作者:太空狗 更新时间:2023-10-29 15:04:03 27 4
gpt4 key购买 nike

我正在编写一个玩具操作系统(所以我不能使用任何库,包括标准库),它是用 gcc 编译的,我想对一些同步代码使用原子。经过一番搜索,我发现 gcc 有两组用于原子操作的内置函数,__sync_*__atomic_* , 但没有关于两者之间区别的信息。

除了后者有一个内存排序参数外,这两者之间有什么区别? __sync_ 版本是否等同于具有顺序排序的 __atomic_ 版本?是否弃用了 __sync_ 版本以支持 __atomic_ 版本?

最佳答案

免责声明:我以前没有使用过这些原语。以下答案基于我对文档的阅读和以前的并发经验。

Is the __sync_ version deprecated in favor of the __atomic_ one?

是的,您应该使用 __atomic 并让编译器在必要时回退到 __sync。

Is the __sync_ version equivalent to __atomic_ version with the sequential ordering?

不,确切的顺序保证在 __sync 的文档中指定。如果您使用 __atomic,并且编译器选择回退到 __sync,那么它将添加代码以满足请求的顺序保证。

来自 __atomic 的文档:

Target architectures are encouraged to provide their own patterns for each of these built-in functions. If no target is provided, the original non-memory model set of ‘__sync’ atomic built-in functions are utilized, along with any required synchronization fences surrounding it in order to achieve the proper behavior. Execution in this case is subject to the same restrictions as those built-in functions.

最后要注意的是:并非所有的 __sync 或 __atomic 操作都可以内联实现。编译器可以将它们实现为对(大概)在标准库中实现的外部函数的调用。如果您无权访问标准库,则必须自己实现缺少的功能。以下是文档中的相关引述:

If there is no pattern or mechanism to provide a lock free instruction sequence, a call is made to an external routine with the same parameters to be resolved at run time.

这些原语是一种低级机制,您应该了解编译器可以做什么和不能做什么。

有关编译器生成内联代码的示例,请参阅相关问题:Atomic operations and code generation for gcc

关于c - gcc 的 __sync 和 __atomic 内在函数有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23446210/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com