mutex spinlock 无锁cas

并发

1)加锁mutex
    获取不到锁就休眠,让出CPU;  
        ==>去尝试获取锁,并不怎么耗时间。 等拿到锁,比较耗时间。

    使用场景:只有一个连接时,去连接数据库。 假如:有3个线程去,这时去竞争,那么就可以用mutex,让竞争不到的不要死等。
            为什么不能用自旋锁呢? 因为会忙等,等于啥也不干空耗CPU。

2)自旋锁
    获取不到锁,继续去检测;

    获取自旋锁:如果不能及时获取,它是一个忙等待的过程,占CPU。

    使用场景:
        (1)其实就是看任务执行的时间长度,不能存在阻塞。
        (2)任务耗时短。

3)无锁CAS
    其实也是一种锁,但是锁的粒度不太一样。

    锁:总线。


4)无锁使用: 队列,放入和读取非常频繁的时候.


5)锁使用场景的选择(其实就是看锁的粒度[共享区域的粒度])
    mutex: 共享区域运行时间比较长  ==>因为会让出CPU,不白耗CPU。

    atomic: 简单的数字+-。

    spinlock: 执行的语句比较少,不存在阻塞. 

    内核态到用户态的消耗。 因为阻塞等待的消耗。

=========================队列的3个版本
线程不安全的
mutex
无锁的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值