保证RTOS线程安全的常规操作
线程安全
定义
- 原子操作:一种不可分割的操作,要么完全执行成功,要么完全不执行,不能被打断
- 临界区:一段代码,这段代码需要在同一时间只允许一个线程执行
- 互斥锁:一种用于保护共享资源的机制,确保同一时间只有一个线程可以访问特定资源
应用
- 裸机
- 原子操作/临界区 可以通过暂时关闭中断响应实现
- 一般用不到互斥锁
- RTOS
- 原子操作:暂时关闭中断响应 + 挂起所有应用(不建议,RTOS尽量不要开启中断,改为线程监听)
- 临界区:挂起所有应用
- 互斥锁:mutex,一般内置上下文切换
- 多进程/多内核
- CAS机制实现芯片寄存器级别的原子操作,一般芯片都有内置对应的寄存器。
建议
RTOS:采用系统的互斥锁,将中断中的共享数据操作改到任务中监听执行;
裸机:采用临界区(原子操作),暂时关闭所有中断响应;
多核心/多进程:采用CAS机制实现无锁线程安全,芯片一般都有CAS相关的寄存器;
CAS(Compare-And-Swap):一般操作系统、编译器、芯片驱动都会提供相应的接口;例如:
Windows :InterlockedCompareExchange
GCC:__atomic_compare_exchange
POSIX:atomic_compare_exchange_strong