gpt4 book ai didi

c - 在C中不使用semapore的数据同步

转载 作者:太空宇宙 更新时间:2023-11-04 05:34:32 24 4
gpt4 key购买 nike

我需要在我的代码中进行数据同步。目前我正在访问中断内部的全局值以及本地函数,如果中断调用频繁,这可能会破坏数据。我需要避免这种情况。我没有在我的代码中使用操作系统,所以我不能使用信号量。使用与信号量类似的锁定方法可能会解决我的问题。

任何帮助将不胜感激

最佳答案

中断与线程或进程的工作方式不同——如果一个线程等待信号量,它不会被调度,直到信号量可用,或者,如果给定,等待超时结束。与此同时,可以安排其他线程,其中一个可能会返回信号量。

中断服务例程不是这种情况——它们不会被任何线程调度中断(如果有的话,那么只会被其他中断),而是一直执行到它们返回。因此,如果 ISR 开始等待信号量(或您要求的类似机制),我们将陷入僵局,因为持有它的线程无法再被调度以返回信号量......

所以你需要一个完全不同的机制!

通常的做法是只要您的函数需要访问公共(public)数据就禁用中断,然后再重新启用它(您也可能需要在 ISR 本身中执行此操作)。

如何?好吧,特定于操作系统/硬件 - 只要您不提供更多详细信息,我就在这里...

只是一些提示:保持禁用中断的时间尽可能短,并确保将经常访问的数据声明为 volatile!

关于c - 在C中不使用semapore的数据同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43779898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com