前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自旋锁的概念,栗子和应用条件

自旋锁的概念,栗子和应用条件

作者头像
名字是乱打的
发布2022-05-13 12:31:57
6010
发布2022-05-13 12:31:57
举报
文章被收录于专栏:软件工程
自旋锁(spinlock)

概念:是指尝试获取锁的线程不会立即阻塞,:是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环.

获取锁的线程一直处于活跃状态,但是并没有执行任何有效的任务,使用这种锁会造成busy-waiting

它是为实现保护共享资源而提出一种锁机制。其实,自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。但是两者在调度机制上略有不同。对于互斥锁,如果资源已经被占用,资源申请者只能进入睡眠状态。但是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,”自旋”一词就是因此而得名

这样的好处是减少线程上下文切换的消耗,缺点是循环会消耗CPU.

举个栗子

此时相当于一把锁

spinLock代码

控制台

思考

自旋锁与普通的锁以及信号量不同,使用普通的锁和信号量在访问资源必须等待的时候操作系统会先把等待的线程加入相应的锁的链表里,然后挂起该线程,挂起后直到有线程释放了对应的锁才有机会获得CPU。而自旋锁则不同,它在等待锁时会循环检测锁是否开启,这对于单处理器来说是浪费CPU,但是在多处理器环境下,不同cpu上的线程同时操作一段临界资源,如果操作只需要很短的时间,(比如改变一个变量的值)循环的代价会少于把线程加入锁的队列及线程切换的代价,这种情境下应该使用自旋锁。

自旋锁的应用条件:

1,临界的代码短;

2,多处理器;

当有大量线程依赖于一个锁时需谨慎思考临界代码占用的百分比

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 自旋锁(spinlock)
  • 自旋锁的应用条件:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档