Linux用户层多线程无锁化原子操作

在项目中升级icu4c库时遇到__sync_sub_and_fetch未定义的问题,研究后发现__sync_xxx系列函数用于多线程无锁化操作,类似于内核的atomic_t。这类函数提供原子性的加/减/与/或/异或等操作。以__sync_fetch_and_add为例,先获取变量值,然后自增并返回旧值。使用时需根据环境决定是否添加-march=i686编译选项,且无需包含特殊头文件。对比使用线程锁,无锁操作更高效。
摘要由CSDN通过智能技术生成

最近由于项目需要,需要将原先使用的icu4c由4.x版本升级到5.x,但是利用编译好的5.x版本的icu4c链接库编译原先的程序时,报出了类似undefined __sync_sub_and_fetch的错误,没办法,最后通过查看icu4c的源码,加入了一些编译选项,将相关的__sync_xxxx函数默认不使用。

虽然问题解决了,但是第一次接触到__sync_xxx类型的函数,还是想弄明白它的作用。后来发现这一类函数非常有用,尤其是在做多线程的无锁化操作时,它感觉就相当与内核里面使用的atomic_t。

__sync_fetch_and_add系列一共有十二个函数,有加/减/与/或/异或/等函数的原子性操作函数, __sync_fetch_and_add, 顾名思义,现fetch,然后自加,返回的是自加以前的值。以count = 4为例,调用__sync_fetch_and_add(&count,1),之后,返回值是4,然后,count变成了5.

在用gcc编译的时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值