惊奇之人 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日