社区
内核笔记的课程社区_NO_1
RK3399平台开发入门到精通系列视频
帖子详情
08. 互斥锁与自旋锁的选择
内核笔记
嵌入式领域优质创作者
博客专家认证
2025-02-10 15:37:10
课时名称
课时知识点
08. 互斥锁与自旋锁的选择
在 Linux 内核中,互斥锁(Mutex) 和 自旋锁(Spinlock) 是两种常用的同步原语,它们都用于在多线程环境中确保对共享资源的互斥访问。尽管它们的作用相似,但在不同的使用场景下,它们的性能表现和适用性有所不同,因此需要根据具体需求来选择合适的锁。
...全文
24
回复
打赏
收藏
08. 互斥锁与自旋锁的选择
课时名称课时知识点08. 互斥锁与自旋锁的选择在 Linux 内核中,互斥锁(Mutex) 和 自旋锁(Spinlock) 是两种常用的同步原语,它们都用于在多线程环境中确保对共享资源的互斥访问。尽管它们的作用相似,但在不同的使用场景下,它们的性能表
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
有别于
互斥锁
的
自旋锁
对于
互斥锁
,如果资源已经被占用,自愿申请者只能进入睡眠状态。但
自旋锁
不会引起调用者睡眠
利用C++11原子量如何实现
自旋锁
详解
一、
自旋锁
自旋锁
是一种基础的同步原语,用于保障对共享数据的互斥访问。与
互斥锁
的相比,在获取锁失败的时候不会使得线程阻塞而是一直自旋尝试获取锁。当线程等待
自旋锁
的时候,CPU不能做其他事情,而是一直处于轮询忙等的状态。
自旋锁
主要适用于被持有时间短,线程不希望在重新调度上花过多时间的情况。实际上许多其他类型的锁在底层使用了
自旋锁
实现,例如多数
互斥锁
在试图获取锁的时候会先自旋一小段时间,然后才会休眠。如果在持锁时间很长的场景下使用
自旋锁
,则会导致CPU在这个线程的时间片用尽之前一直消耗在无意义的忙等上,造成计算资源的浪费。 使用
自旋锁
时要注意: 由于自旋时不释放CPU,因而持有
自旋锁
的线程应该
SpinLock.cpp
为了效率,不使用C++语言提供的Mutex互斥量,而使用不使用线程被阻塞的方式,即所谓的
自旋锁
,这是
自旋锁
的一种实现方式,使用C++11的原子变量,不用锁机制,实现的一种无锁的
自旋锁
互斥锁
vs
自旋锁
本文首发于:行者AI 锁在生活中用处很直接,比如给电瓶车加锁就是防止被偷。在编程世界里,「锁」就五花八门了,它们有着各自不同的开销和应用场景。在存在数据竞争的场景,如果选对了锁,能大大提高系统性能,否则会互相拖后腿,性能急剧降低。 加锁的目的就是保证共享资源在任意时间内,只有一个线程可以访问,以此避免数据共享导致错乱的问题。最底层就是两种锁:「
互斥锁
」和「
自旋锁
」,其他高级锁,如读写锁、悲观锁、乐观锁等都是基于它们实现的。 1.
互斥锁
和
自旋锁
:谁更轻松高效? 想知道它们谁更高效,要先了解它们在做同一件.
互斥锁
与
自旋锁
我们知道线程同步是并行编程中非常重要的手段,其中最典型的就是用pthreads提供的锁机制(lock)来对多个线程之间共享的临界区进行保护。我们知道pthreads也提供了多种锁的机制如:
互斥锁
、
自旋锁
、条件变量、读写锁。今天就先来讲讲
自旋锁
与
互斥锁
。 一、
互斥锁
互斥锁
也叫互斥量是我们实现同步的重要的工具,在线程访问共享资源之前对互斥量进行加锁,在线程访问共享资源后对互斥量进行解锁,通过加锁与
内核笔记的课程社区_NO_1
9
社区成员
98
社区内容
发帖
与我相关
我的任务
内核笔记的课程社区_NO_1
一直从业于半导体行业,曾为Linux内核开源文档社区提交过若干文档。 主要从事Linux、Android相关系统软件开发工作,负责Soc芯片BringUp及系统软件开发,喜欢阅读内核源代码,在不断的学习和工作中深入理解内存管理,进程调度,文件系统,设备驱动等内核子系统。
复制链接
扫一扫
分享
社区描述
一直从业于半导体行业,曾为Linux内核开源文档社区提交过若干文档。 主要从事Linux、Android相关系统软件开发工作,负责Soc芯片BringUp及系统软件开发,喜欢阅读内核源代码,在不断的学习和工作中深入理解内存管理,进程调度,文件系统,设备驱动等内核子系统。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章