c - FreeRTOS 跨线程读取

标签 c multithreading thread-safety multitasking freertos

让一个线程修改原子单元(例如字符)而另一个线程仅读取它是否安全? 当然,在允许这样做的环境中,例如 freertos。

我得到了一些执行此操作的代码,它使用 bool (定义为 char)作为信号量,我不确定为什么他们不使用信号量只是为了清楚起见,但话又说回来,我看不到使用 char 确实有危险。

最佳答案

它是安全的如果:

1.您的处理器在单个指令中读取一个字符(这很可能)

2.您的处理器架构在执行指令时外部中断不会改变控制流。

3.仅当您的变量通过 ISR 更新时,第 2 点才有效

关于c - FreeRTOS 跨线程读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24085970/

相关文章:

我可以在 C 的变量声明中使用函数吗?诠释 f(), 我;

c++ - 是否存在适用于 Windows Embedded Compact 的软件 CPU 分析器?

c++ - 互斥锁和线程独立性

java - 通过串行连接将minecraft插件连接到arduino

c - 为什么只有第一个中断起作用?

c++ - 多线程和临界区使用 - C++

c++ - 使用_endthread();

java - 如何使静态日历线程安全

C# Winforms 线程 : Closed Form Gets Invoked

multithreading - Python 类管道流对象