互斥锁、自旋锁、读写锁、条件锁、悲观锁、乐观锁

一. 互斥锁(Mutex)

互斥锁用于控制多个线程对他们之间共享资源互斥访问的一个信号量。也就是说是为了避免多个线程在某一时刻同时操作(如修改)一个共享资源。如果占用共享资源的线程释放互斥量时,有一个以上的线程阻塞,那么所有该锁上的阻塞线程进入准备就绪状态(其中也包括释放锁的线程,该线程也会进入就绪队列),准备就绪状态的所有线程,通过竞争,进入运行状态,然后竞争获取锁资源。

二. 自旋锁(Mutex)

自旋锁是一种非阻塞锁,也就是说,如果某线程需要获取自旋锁,但该锁已经被其他线程占用时,该线程不会被挂起(不会进入阻塞队列,一直处于就绪队列或运行状态,当CPU调度算法抢占该线程的CPU资源,该线程会再次进入就绪队列),而是在不断的消耗CPU的时间,不停的试图获取自旋锁。从“自旋锁”的名字也可以看出来,如果一个线程想要获取一个被使用的自旋锁,那么它可能会一致占用CPU请求,不会主动释放CPU资源,直到获取这个锁为止。
缺点:如果某个线程持有锁的时间过长,就会导致其它等待获取锁的线程进入循环等待,消耗CPU,使用不当会造成CPU使用率极高。(未获取到锁的线程是不会进入阻塞状态,当处理机分配的时间片用完后,该线程会重新回到就绪队列,等待处理机调度,进行上下文切换)
非自旋锁在获取不到锁的时候会进入阻塞状态,从而进入内核态阻塞队列,当获取到锁的时候,从阻塞队列进入到就绪队列,通过处理机资源调度࿰

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值