linux 自旋锁(spinlock)和互斥锁(mutex)

一、自旋锁(spinlock)介绍

自旋锁(spinlock)是一种对临界资源进行互斥访问的手段,它是为防止多处理器并发而引入的一种锁,在内核钟大量用于中断处理部分。

自旋锁在锁定的时候不会休眠,一直等待尝试,因此不合适进行长时间的锁保持。自旋锁要慎用,只有在内核可抢占式或SMP的情况下才会用到,自旋锁适用于锁使用者保持锁的时间比较久的情况下。

二、互斥锁(mutex)介绍

互斥锁(Mutex)是Linux内核中的一种同步机制,它用于防止多个线程同时访问共享资源,从而保护临界区的代码不受破坏。

互斥锁在原子操作API的基础上实现,同一时间只能有一个任务持有互斥锁,而且只有这个任务可以对互斥锁进行解锁。当无法获取锁时,线程进入睡眠等待状态。

与自旋锁不同,互斥锁不能进行递归锁定或解锁,只能在同一线程里对应使用,所以它只能用于线程的互斥。

三、自旋锁(spinlock)和互斥锁(mutex)的区别

1、获取锁失败时:自旋锁(spinlock)原地等待,直到得到锁;互斥锁(mutex)线程释放CPU给其他线程,等到线程下一次唤醒。

2、开销成本:自旋锁(spinlock)自旋锁开销较小;互斥锁(mutex)无法获取到互斥锁时,会发生上下文切换并休眠,上下文切换的开销相对较大,因此在需要保护的临界区较小时,宜选用自旋锁,否则选用互斥锁。

3、使用场景:互斥锁(mutex)只能在进程上下文中使用,不能在中断上下文中使用,而自旋锁(spinlock)可以在中断上下文中使用。

4、互斥锁只能由获取到该锁的进程来释放,而自旋锁的释放没有这个限制。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值