惊奇之人 2022-11-04 12:52 采纳率: 80%
浏览 11
已结题

struct会有线程同步问题吗?

我最近在看ardupilot的源码,它是运行在stm32的rtos上的,里面经常有:
struct position{
int32_t lat;
int32_t lng;
};

这样的结构体,如果一个任务进行写,一个任务读,写任务修改完lat进行了任务切换,由读任务进行读取,就会导致读到的strcut里lat是最新的值,lng是旧的值,这应该需要加锁来控制吧,ardupilot里大量使用了这样的结构体,但没有用锁,怎么保证正常运行的呢。其他平台的c c++编程应该也是类似

  • 写回答

1条回答 默认 最新

  • 伍六七0804 2022-11-04 13:51
    关注

    如果是读写同一个结构体变量,那肯定多任务处理的时候会有问题。一般RTOS任务通讯都是申请一块临时的结构体空间,然后填充,通过消息队列把这个指针发送给其他任务,其他任务去用这个指针读取值,最后释放掉指针。多任务同时访问全局变量,必须要加锁或者使用信号量让多任务不能同时操作全局变量

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月7日
  • 已采纳回答 2月27日
  • 创建了问题 11月4日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度