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

保证RTOS线程安全的常规操作

线程安全

定义

  • 原子操作:一种不可分割的操作,要么完全执行成功,要么完全不执行,不能被打断
  • 临界区:一段代码,这段代码需要在同一时间只允许一个线程执行
  • 互斥锁:一种用于保护共享资源的机制,确保同一时间只有一个线程可以访问特定资源

应用

  • 裸机
    • 原子操作/临界区 可以通过暂时关闭中断响应实现
    • 一般用不到互斥锁
  • RTOS
    • 原子操作:暂时关闭中断响应 + 挂起所有应用(不建议,RTOS尽量不要开启中断,改为线程监听)
    • 临界区:挂起所有应用
    • 互斥锁:mutex,一般内置上下文切换
  • 多进程/多内核
    • CAS机制实现芯片寄存器级别的原子操作,一般芯片都有内置对应的寄存器。

建议

RTOS:采用系统的互斥锁,将中断中的共享数据操作改到任务中监听执行;
裸机:采用临界区(原子操作),暂时关闭所有中断响应;
多核心/多进程:采用CAS机制实现无锁线程安全,芯片一般都有CAS相关的寄存器;

CAS(Compare-And-Swap):一般操作系统、编译器、芯片驱动都会提供相应的接口;例如:
Windows :InterlockedCompareExchange
GCC:__atomic_compare_exchange
POSIX:atomic_compare_exchange_strong


http://www.mrgr.cn/news/26905.html

相关文章:

  • Mybatis通用接口-基于Provider
  • 模型部署基础
  • 2023年09月中国电子学会青少年软件编程(Python)等级考试试卷(一级)答案 + 解析
  • VPP配置网卡多队列no bufs问题
  • Humanize AI 简介
  • vue2基础系列教程之v-model及面试高频问题
  • Brave编译指南2024 Windows篇:构建并启动Brave项目(七)
  • Flutter iOS混淆打包
  • CAESES许可证转移方法
  • Linux下read函数详解
  • 【SpringBoot】调度和执行定时任务--Quartz(超详细)
  • kafka 之 本地部署单机版
  • 9.14 DFS 简单 111 Minimum Depth of Binary Tree 112 Path Sum
  • C/C++动态库函数导出 windows
  • Netty配置SSL证书加密
  • 使用PyTorch进行图像风格迁移:基于VGG19实现
  • SpringBoot框架下的房产销售系统开发
  • SQL Server数据库深入解析(建议收藏)
  • 使用nvm安装node版本报错
  • AI创作新手册:精通Prompt提示词的提问策略