自旋锁

简介: 自旋锁

定义

自旋锁是一种锁,线程反复检查锁变量是否可用。
自旋锁属于忙等待。

为什么需要自旋锁

其实就是目前的锁都还不够快。在多处理器系统中,信号量是能够解决同步问题的,但是在一些场景下信号量的速度还是不够快。这个场景就是CPU能够很快完成一个任务,快到什么程度哪?会比信号量为了检查信号计数,把进程/线程插入到信号量队列,然后挂起这些进程/线程。信号量在执行以上动作的时候可能其他CPU已经把信号量释放了,那么这样信号量就不能很快的感知并处理。

在这些情况下,在多处理器操作系统中使用了自旋锁。

自旋锁和信号量的区别

主要区别就是进程/线程是否排队

自旋锁没有进程/线程等待队列

信号量有进程/线程等待队列

自旋锁发现另一个进程/线程正在使用锁,那么它就不停的进行循环检测另一进程/线程是否释放锁,直到锁被释放。

信号量则是如果信号量技术不满足就将进程/线程放入等待队列然后挂起进程/线程,直到信号量计数满足并通知处理器该进程/线程可以重新进行调度。

自旋锁不适合单处理器

在单处理器环境下,一个进程/线程发现锁被其他进程/线程使用,那么自己就疯狂“旋转”, 这时候其实是该进程/线程已经被调度上了CPU,而CPU只有一个,与此同时使用了锁的进程/线程没有在运行,它处于非运行态,那么这时候自旋锁就是空转,因为所需的锁是不会改变状态的,白白浪费CPU时间。

自旋锁的实现

这里给出Java的Demo代码

// 以下两个函数都是原子操作
// getState():获取当前锁的状态,返回一个整型值

// compareAndSwap(expect, update): 比较并更新,成功则返回true,失败则返回false

while (true) {
    int state = getState();
    if (compareAndSwap(state, update)) {
        break;
    }
}

// 备注:原子操作就是不可以分开的操作,
目录
相关文章
|
6月前
|
人工智能 前端开发 语音技术
开源学习神器把2小时网课压成5分钟脑图!BiliNote:一键转录哔哩哔哩视频,生成结构化学习文档
本文介绍基于FastAPI与React构建的开源视频笔记工具BiliNote,其整合多模态AI技术实现视频内容结构化解析,支持跨平台视频源处理与本地化部署方案,提供从语音转写到智能摘要的全流程自动化能力。
1478 36
开源学习神器把2小时网课压成5分钟脑图!BiliNote:一键转录哔哩哔哩视频,生成结构化学习文档
|
前端开发
伪类中使用element图标
如何在CSS伪类中使用Element UI图标,以及伪类与伪元素在CSS3中的区别和应用。
126 1
伪类中使用element图标
|
9月前
|
机器学习/深度学习 人工智能 测试技术
PsycoLLM:开源的中文心理大模型,免费 AI 心理医生,支持心理健康评估与多轮对话
PsycoLLM 是合肥工业大学推出的中文心理大语言模型,基于高质量心理数据集训练,支持心理健康评估、多轮对话和情绪识别,为心理健康领域提供技术支持。
2623 51
PsycoLLM:开源的中文心理大模型,免费 AI 心理医生,支持心理健康评估与多轮对话
|
8月前
|
机器学习/深度学习 人工智能 算法
o3-mini:OpenAI 发布最新推理模型,强大的STEM推理能力,灵活调整推理强度
OpenAI o3-mini是OpenAI推出的全新推理模型,专为科学、数学和编程等技术领域优化,支持三种推理强度,灵活调整性能。
439 25
o3-mini:OpenAI 发布最新推理模型,强大的STEM推理能力,灵活调整推理强度
|
7月前
|
域名解析 人工智能 API
学生看过来!白嫖阿里云服务器自建DeepSeek个人网站,3分钟站点上线,超简单!
学生看过来!利用阿里云服务器自建DeepSeek个人网站,3分钟快速上线,超简单!学生用户可领取300元代金券,实现0成本部署;普通用户则可选择99元/年的服务器。通过阿里云计算巢“DeepSeek个人站点-快速部署”服务,无需代码,最快5分钟即可体验多个AI模型。教程详情涵盖从打开部署页面、选择套餐、设置实例密码到获取API-KEY的完整步骤,助你轻松搭建专属AI网站。
388 1
|
JSON 前端开发 Java
java系列之 页面打印出 [object Object],[object Object]
文章解释了在前端页面打印JSON对象时出现`[object Object]`的原因,并提供了使用`JSON.stringify(json对象)`方法将对象转换为可读字符串的解决方案。
java系列之 页面打印出 [object Object],[object Object]
|
存储 监控 Kubernetes
Docker学习路线10:容器安全
容器安全是实施和管理像Docker这样的容器技术的关键方面。它包括一组实践、工具和技术,旨在保护容器化应用程序及其运行的基础架构。在本节中,我们将讨论一些关键的容器安全考虑因素、最佳实践和建议。
948 1
|
Ubuntu Linux Windows
ubuntu16.04安装MATLAB R2017b步骤详解(附完整文件包)
ubuntu16.04安装MATLAB R2017b步骤详解(附完整文件包)
900 0
ubuntu16.04安装MATLAB R2017b步骤详解(附完整文件包)
|
存储 监控 Linux
linux磁盘容量爆满了,如何进行扩容呢?记录centos7系统下扩容过程
linux磁盘容量爆满了,如何进行扩容呢?记录centos7系统下扩容过程
648 0
|
存储 缓存 负载均衡
Nacos系列-Nacos服务注册与发现
Nacos系列-Nacos服务注册与发现
1304 0