自旋锁
自旋锁与互斥锁很相似,在访问共享资源之前对自旋锁进行上锁,在访问完成后释放自旋锁(解锁);事实上,从实现方式上来说,互斥锁是基于自旋锁来实现的,所以自旋锁相较于互斥锁更加底层。
自旋锁与互斥锁之间的区别:
- 实现方式上的区别:互斥锁是基于自旋锁而实现的,所以自旋锁相较于互斥锁更加底层;
- 开销上的区别:获取不到互斥锁会陷入阻塞状态(休眠),直到获取到锁时被唤醒;而获取不到自旋锁会在原地“自旋”,直到获取到锁;休眠与唤醒开销是很大的,所以互斥锁的开销要远高于自旋锁、自旋锁的效率远高于互斥锁;但如果长时间的“自旋”等待,会使得 CPU 使用效率降低,故自旋锁不适用于等待时间比较长的情况。
- 使用场景的区别:自旋锁在用户态应用程序中使用的比较少,通常在内核代码中使用比较多;因为自旋锁可以在中断服务函数中使用,而互斥锁则不行,在执行中断服务函数时要求不能休眠、不能被抢占(内核中使用自旋锁会自动禁止抢占),一旦休眠意味着执行中断服务函数时主动交出了CPU 使用权,休眠结束时无法返回到中断服务函数中,这样就会导致死锁!
初始化和销毁自旋锁
#include < pthread.h >
int pthread_spin_init(pthread_spinlock_t *lock, int pshared);
int pthread_spin_destroy(pthread_spinlock_t *lock);
加锁和解锁
#include < pthread.h >
int pthread_spin_lock(pthread_spinlock_t *lock);
int pthread_spin_trylock(pthread_spinlock_t *lock);
int pthread_spin_unlock(pthread_spinlock_t *lock);
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
Linux
+关注
关注
87文章
10990浏览量
206738 -
线程
+关注
关注
0文章
489浏览量
19500
发布评论请先 登录
相关推荐
Linux驱动开发笔记-自旋锁和信号量
:如果在写代码时,有以上的竞态发生,一定要注意进行互斥访问7.解决竞态的方法:中断屏蔽原子操作自旋锁信号量如何使用以上4个机制呢?1.中断屏蔽解决哪些情况的竞态:进程和进程的抢占中断和进程中断和中断
发表于 08-30 18:08
【MiCOKit试用体验】庆科MiCO系统篇(3)MiCO RTOS互斥锁
本帖最后由 gjianw217 于 2015-10-25 15:45 编辑
在本帖子中,主要分析一下庆科MiCO RTOS的互斥锁,具体包括:OS互斥锁MiCO
发表于 10-24 17:02
信号量、互斥锁、自旋锁
信号量、互斥锁、自旋锁http://bbs.edu118.com/forum.php?mod=viewthread&tid=488&fromuid=231(出处: 信盈达IT技术社
发表于 08-29 09:48
小熊派华为物联网操作系统LiteOS内核教程05-互斥锁
本帖最后由 小熊派开源社区 于 2020-2-24 17:52 编辑
1. LiteOS的互斥锁1.1. 互斥锁在多任务环境下,往往存在多个任务竞争同一共享资源的应用场景,互斥
发表于 01-19 11:02
Linux内核同步机制的自旋锁原理是什么?
自旋锁是专为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,防止中断处理中的并发可简单采用关闭中断的方式,即在标志寄存器中关闭/打开中断标志位,不需要自旋
发表于 03-31 08:06
【HarmonyOS HiSpark AI Camera 】第三次回眸-鸿蒙的线程和互斥锁
/ ... ad-0000001050141770提供的API进行编程。多线程在多核处理器可以加快运行时间,在单核处理器上没有什么优势。线程同步,最常用的是互斥锁、条件变量、信号量和读写锁。我的这个例子里面,使用漏桶算法
发表于 11-13 20:01
BearPi-HM_Nano开发板鸿蒙OS内核编程开发——互斥锁
BearPi-HM_Nano开发板鸿蒙OS内核编程开发——互斥锁本示例将演示如何在BearPi-HM_Nano开发板上使用cmsis 2.0 接口使用互斥来同步任务Mutex API分析
发表于 04-09 10:02
鸿蒙内核实现用户态快速互斥锁Futex设计资料合集
Futex(Fast userspace mutex,用户态快速互斥锁),系列篇简称 快锁 ,是一个在 Linux 上实现锁定和构建高级抽象锁如信号量和POSIX
发表于 03-23 14:12
如何在RK2206上使用鸿蒙LiteOS-M内核接口进行互斥锁编程开发
实验内容本例程演示如何在小凌派-RK2206开发板上使用鸿蒙LiteOS-M内核接口,进行互斥锁编程开发。程序设计互斥锁也叫做互斥型信号量,
发表于 08-05 16:28
RT-Thread实现的互斥锁属性包括哪些
* lock);函数返回 lock无效返回EINVAL,否则返回0或EPERM。互斥锁属性RT-Thread实现的互斥锁属性包括互斥
发表于 08-12 15:06
RTThread中POSIX兼容层自旋锁如何实现呢?
RTThread中POSIX兼容层里自旋锁的加锁实现好像不太对。如代码所示:int pthread_spin_lock (pthread_spinlock_t *lock){
发表于 02-01 15:54
评论