最近由于项目需要,需要将原先使用的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编译的时