首页 > 试题广场 >

主循环与UART接收中断共享一个32位环形缓冲区的读写指针

[单选题]
主循环与UART接收中断共享一个32位环形缓冲区的读/写指针。处理器对32位访问并非天然原子,偶发出现指针撕裂导致数据错乱。下列哪种做法最能从根本上避免该问题?
  • 在访问共享指针时进入极短临界区(关中断或屏蔽对应中断),保证一次性原子读写
  • 将指针变量声明为volatile即可
  • 将指针拆分为两个16位字段分别读写以减少出错概率
  • 提高UART波特率以缩短中断处理时间
volatile关键字作用: 1. 修饰的变量被修改后立即进入主内存,其他线程读取时强制从主内存中获取,避免因本地缓存导致的数据不一致。 2. 通过插入内存屏障,防止优化器和处理器优化指令顺序,确保操作按程序执行。 3. 但是不能保证原子性。
发表于 2025-10-17 09:15:40 回复(0)