muduo中的原子操作


本文目的

 
  在muduo中,考虑到线程安全,自定义了原子操作类AtomicIntegerT,代码中全部采用了gcc的原子操作集合,有两种实现(引入c++11前的__sync和引入c++11后 的__atomic)。不过在c++11的std中也有了atomic实现(c++11之前没有atomic实现)。gcc的__sync和__atomic,atomic。这些听起来确实有些凌乱,在读源码前,我就先介绍一下c++原子操作的背景。


atomic背景

 
  有多个线程都有可能对某个共享的数据进行操作(增删改),就会产生线程安全问题。虽然我们可以用锁去解决,但似乎有些浪费。而开销小的原子操作就可以解决这个问题。

  • 原子操作:操作本身是不可分割的(Atomicity),一个线程对某个数据的操作何时对另外一个线程可见(Visibility),执行的顺序是否可以被重排(Ordering)。
  • 对于原子操作的三个特点详解

gcc __sync

 
  简而言之,就是c++11之前,标准库里没有原子操作函数,gcc提供的原子操作函数集合

type __sync_fetch_and_OP (type *ptr, type value, ...)
type __sync_OP_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, ...)
__sync_synchronize (...)

type __sync_lock_test_and_set (type *ptr, type value, ...)
void __sync_lock_release (typ
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值