gpt4 book ai didi

c - 用于执行原子操作的函数

转载 作者:行者123 更新时间:2023-11-30 17:54:30 24 4
gpt4 key购买 nike

C 运行时库或任何其他实用程序库是否支持执行原子操作(例如整数的递增/递减)等函数?

如果是,那么使用此类函数可以使哪些操作成为原子操作?

使用此类函数会比互斥体等普通同步原语更有利吗?

操作系统:Windows、Linux、Solaris 和 VxWorks

最佳答案

C11 之前

C 库没有。

在 Linux 上,gcc 提供了一些 -- 查找 __sync_fetch_and_add , __sync_fetch_and_sub ,等等。

如果是 Windows,请查找 InterlockedIncrement , InterlockedDecrement``, InterlockedExchange`等等。如果您在 Windows 上使用 gcc,我猜它也具有与 Linux 上相同的内置函数(尽管我尚未验证这一点)。

在 Solaris 上,这取决于情况。想必如果您使用 gcc,它可能(再次)具有与 Linux 下相同的内置函数。除此之外,还有一些库,但没有真正标准化。

C11

C11 添加了一组(相当)完整的原子操作和原子类型。这些操作包括类似atomic_fetch_add之类的内容。和atomic_fetch_sum (以及 *_explicit 的相同版本,可让您指定所需的订购模型,其中默认模型始终使用 memory_order_seq_cst )。还有fence函数,例如atomic_thread_fenceatomic_signal_fence .

这些类型对应于每个普通整数类型——例如,atomic_int8_t对应int8_tatomic_uint_least64_t对应uint_least64_t 。这些是typedef <stdatomic.h> 中定义的名称。为了避免与任何现有名称发生冲突,您可以省略 header ;编译器本身使用实现者命名空间中的名称(例如 _Atomic_uint_least32_t 而不是 atomic_uint_least32_t )。

关于c - 用于执行原子操作的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14909672/

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