Frank Tan

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

2010年12月11日

摘要: GCC 提供的原子操作gcc从4.1.2提供了__sync_*系列的built-in函数,用于提供加减和逻辑运算的原子操作。其声明如下:[代码]这两组函数的区别在于第一组返回更新前的值,第二组返回更新后的值。type可以是1,2,4或8字节长度的int类型,即:[代码]后面的可扩展参数(...)用来指出哪些变量需要memory barrier,因为目前gcc实现的是full barrier(类似于linux kernel 中的mb(),表示这个操作之前的所有内存操作不会被重排序到这个操作之后),所以可以略掉这个参数。[代码]这两个函数提供原子的比较和交换,如果*ptr == oldval,就将 阅读全文
posted @ 2010-12-11 20:03 Frank Tan 阅读(43915) 评论(0) 推荐(2) 编辑

摘要: LIKELY和UNLIKELY的一般定义如下:#define LIKELY(x) (__builtin_expect(!!(x),1))#define UNLIKELY(x) (__builtin_expect(!!(x),0))为什么要使用两个叹号呢?取两次非主要是为了顺利的和0或1进行比较。 阅读全文
posted @ 2010-12-11 00:02 Frank Tan 阅读(855) 评论(0) 推荐(0) 编辑