当前位置: 首页 > news >正文

基于原子的自旋锁认识与学习

我们不妨回归最朴素的思想,如果要做代码块的保护可以怎么实现。

显然,做一个全局的标记即可。在即将进入临界区前读取该标记是否可以通过,若可通过则修改此标记防止其他线程的通过。也就是我们常说的读改写操作。但寻常变量在上文中提到的计算机内存模型中显然是不可以实现这样的效果的。

因此这里就需要的是硬件的加持。通过在硬件层面通常会提供的一些原子操作的指令集,直接在处理器级别执行原子操作,而无需进行复杂的同步控制。

简单的用伪码表示该原子对象可以为:

object atomic function init() set(0) function clear() set(0) function test_and_set() -> bool if is 0 then set(1) return true else return false

关于解锁比较简单,直接将原子对象重新置为空闲即可。

而上锁的操作是需要不断循环检测该标志是否已经被标记,这就是所谓的自旋。当然不断的去查询检测,其实让 CPU 执行了多余操作,因此可以让其在循环内部一定程度的让出任务调度权。

function lock() while !atomic.test_and_set() 直接自旋 or 让出任务调度权 function unlock() atomic.clear() function thread_fun() lock() 临界区操作 unlock()

自旋锁的方案对单处理器和多处理器的环境下均适用。且是直接用循环判断上锁的,比较适合锁竞争较为激烈和等待时间较短的情况。

但其背后也有着一定的缺点。特别是在上锁时有着大量的无效检查。而直接让出调度权有会增加线程间的切换开销,其公平性取又决于系统的调度策略。

不过有了这个最基础的模型,我们可以在软件层面对其制定一系列的策略方案,从而将这些无法避免的缺点来最小化,并延申出功能更加丰富和强大的锁。

http://www.jsqmd.com/news/779451/

相关文章:

  • KIWI 1P5 FPGA开发板:低成本数字逻辑设计与教学利器
  • Go语言错误处理:error接口与错误包装详解
  • Advantech发布基于NXP i.MX 95的工业级系统模块解析
  • 分布式爬虫农场架构解析:从核心原理到工程实践
  • 开源大语言模型商用选型指南:从架构演进到部署实战
  • 苹果签名
  • Quill 编辑器光标跳转至顶部的解决方案
  • 混合CV-DV量子计算:原理、实现与HyQBench基准测试
  • Spanory:跨运行时AI智能体可观测性工具的设计与实战
  • Go——并发编程
  • 从C风格字符串到现代C++:用std::string_view写出更优雅、更安全的接口设计
  • Edge 浏览器保存密码真的安全吗?一次讲清“明文内存”争议、真实风险和正确防护
  • openspec业务SDD驱动开发
  • Bitloops:为AI编程助手构建本地项目记忆,告别上下文遗忘
  • 团队管理系统现代化重构:从单体到微服务,从jQuery到React/Vue
  • 内容运营如何利用 Taotoken API 批量生成文章标题与大纲
  • 2025最权威的六大降重复率方案解析与推荐
  • 从边缘计算到具身智能,奇点大会五年技术跃迁路径全解析,错过这5个信号=掉队下一代AI周期
  • 浙江旅游职业学院不止导游酒店!近三年新增热门专业盘点
  • DDD难落地?就让AI干吧!
  • Spring Security OAuth2.1:现代化身份认证
  • 构建基于异步任务队列与AI代理的代码自愈系统
  • 世界地球日|从“发得出”迈向“用得好”,电能质量装置如何守护绿色低碳?
  • 一个数据包让服务器蓝屏?MS12-020漏洞实战,微软补丁救场
  • Windows 一键部署 OpenClaw 教程|5 分钟启用本地 AI 智能体,简化全环节配置
  • 2026届必备的六大降重复率方案横评
  • 25_通过参考视频快速生成提示词——高效复刻精彩分镜
  • Java 性能调优:火焰图分析与优化
  • 高手进阶(三):写完代码该做什么?代码审查别再只用/review:Claude Code三档审查体系,<1%误报率照抄配置
  • CST微波工作室新手避坑指南:从Brick建模到材料库调用的5个实用技巧