GCC的built-in方法之 —— 原子操作

GCC提供一系列内置函数用于在多线程环境中实现整型或指针类型的原子操作,如原子自增、自减等,避免加锁带来的额外开销。这些函数包括__sync_fetch_and_add、__sync_sub_and_fetch等,它们在底层通过指令层面保证操作的原子性,并实现不同类型的内存屏障,以满足Intel Itanium Processor-specific ABI的要求。
摘要由CSDN通过智能技术生成

如果要在多线程中对同一个整型变量进行加减操作,我们知道可以通过加锁的方式保证线程同步,但仅对这一个变量加锁,是不是大材小用了?有没有类似于Linux内核中的atomic_inc()/atomic_dec()方法从指令的层面上实现操作变量的原子性?

答案是,有的。GCC提供了一系列内置函数,来完成对一些简单的数据操作的同步。

* * *

type __sync_fetch_and_add (type *ptr, type value, ...)
type __sync_fetch_and_sub (type *ptr, type value, ...)
type __sync_fetch_and_or (type *ptr, type value, ...)
type __sync_fetch_and_and (type *ptr, type value, ...)
type __sync_fetch_and_xor (type *ptr, type value, ...)
type __sync_fetch_and_nand (type *ptr, type value, ...)

这些builtin函数的作用通过名字就可以看出来,相当于:

{ tmp = *ptr
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值