gcc内置原子操作总结
发布时间
阅读量:
阅读量
自gcc版本4.1.2起,该编译器引入了__sync_系列的内置函数,用以实现对整型变量进行加减及逻辑运算的原子操作。其中,type参数所代表的整数类型长度可为1、2、4或8字节。后续的可扩展参数(...)用于指定需要内存屏障的变量,然而由于当前gcc实现的是全内存屏障(类似于Linux内核中的mb()函数,意味着所有在此操作之前的内存访问不会被重新排序至该操作之后),因此该参数可以省略。若在32位系统中使用,可能需要通过添加-march=pentium4、-march=i686、-march=i586或-march=i486等编译选项来启用__sync函数的支持。此外,在32位系统环境下,type=8的情况可能无法得到支持。
第一组,返回更新前的值(类比i++)
type __sync_fetch_and_add (type *ptr, type value, ...)
与原子操作版本相对应的实现方式为
{ tmp = *ptr; *ptr += value; return tmp; }
type __sync_fetch_and_sub (type *ptr, type value, ...)
对应于原子执行的
{ tmp = *ptr; *ptr -= value; return tmp; }
type __sync_fet
全部评论 (0)
还没有任何评论哟~
