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

线程安全

定义

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

应用

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

建议

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

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

你可能感兴趣的:(单片机,嵌入式硬件)