gcc 提供的原子操作 __sync_xxx
来源:互联网 发布:淘宝购买流程 编辑:程序博客网 时间:2024/06/04 21:50
gcc 提供的原子操作 __sync_xxx 系列
gcc 原子操作, 多线程下变量操作的原子性.
- 版本要求: gcc >= 4.1.2.
- 有测发现不用include任何头文件,gcc编译时会自动替换成对应的汇编代码.
可操作的内存对象type只能是1,2,4,8字节. 这也是局限之处.
下面是操作的名字,见名知意.
- 官网介绍: http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Atomic-Builtins.html
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);type __sync_add_and_fetch (type *ptr, type value); type __sync_sub_and_fetch (type *ptr, type value); type __sync_or_and_fetch (type *ptr, type value); type __sync_and_and_fetch (type *ptr, type value); type __sync_xor_and_fetch (type *ptr, type value); type __sync_nand_and_fetch (type *ptr, type value);bool __sync_bool_compare_and_swap (type*ptr, type oldval, type newval, ...)type __sync_val_compare_and_swap (type *ptr, type oldval, type newval, ...)type __sync_lock_test_and_set (type *ptr, type value, ...)void __sync_lock_release (type *ptr, ...)__sync_synchronize (...)
原理:
利用intel指令 lock 前缀指令, gcc将代码翻译成汇编代码后,执行时汇编代码具有内存排他性.
自行用gcc汇编一下,
gcc -S sync_test.c -o sync_test.o
. 可以看到:
static int count = 0;__sync_fetch_and_add(&count,1);
- 翻译成如下指令:
lock addl $1, count(%rip)
和 互斥量加锁 的比较:
- 简单点说的话,在小规模的问题上还是可以用用 __sync_xx的。在大规模等分布式计算上,还是有锁更通用.
- 具体深入的比较可以看看这个帖子.
- http://www.cnblogs.com/silentNight/p/5685629.html
0 0
- gcc 提供的原子操作 __sync_xxx
- GCC 提供的原子操作
- GCC 提供的原子操作
- GCC 提供的原子操作
- GCC 提供的原子操作
- GCC 提供的原子操作
- gcc提供的原子操作
- GCC 提供的原子操作
- GCC 提供的原子操作
- GCC 提供的原子操作
- GCC 提供的原子操作
- GCC 提供的原子操作
- GCC 提供的原子操作
- GCC 提供的原子操作
- GCC 提供的原子操作
- GCC 提供的原子操作
- GCC 提供的原子操作
- GCC 提供的原子操作
- 算法题解答
- LightOJ
- 每日一点专业英文2017.4.22
- 一份IDEA + gradle + spring项目的build.gradle清单
- jQuery的全局API
- gcc 提供的原子操作 __sync_xxx
- Linux内核学习总结
- 4.22
- 简析Map及Map集合的遍历解析、排序
- 图的邻接矩阵存储
- 2017.4.22 loli测试
- Spring+Hibernate+Atomikos集成构建JTA的分布式事务--解决多数据源跨库事务
- 杂谈
- 三. Typora:简单高效的 Markdown 编辑器