我在VxWorks中编写了涉及多个任务的代码。他们工作顺利。
在那个时间点,我并不关心原子操作。但后来,在阅读文献时,我发现当多个线程访问同一个变量时,原子操作很重要。
我的结构被多个任务使用,并且运行正常。但是从现在开始,我要小心。那么,是否有任何方法可以确保结构操作具有原子安全性。
答案 0 :(得分:4)
您似乎在询问有关多线程基本问题/陷阱的非常一般性问题。为此,我建议你研究一下信号量,互斥量,队列等的一般主题。这个问题可能有点过于笼统,无法深入回答。
特别是关于vxWorks,操作系统有许多功能可以帮助您完成任务之间的互斥或数据传递。
我将引用semLib用于信号量,msgQLib用于消息队列(以下是vxWorks文档链接)。
http://www.vxdev.com/docs/vx55man/vxworks/ref/semLib.html#top http://www.vxdev.com/docs/vx55man/vxworks/ref/msgQLib.html#top
快乐的编码!
答案 1 :(得分:2)
如果我理解正确,你的问题很普遍。 您可以通过以下方式管理对资源的并发访问(例如全局变量):
最后一种方法总是有效,但是如果长时间禁用中断,操作系统可能会停止正常工作(例如,超时时通信可能会失败)。
答案 2 :(得分:0)
Atomic 意味着操作将不间断地执行。因此,在执行操作或一组操作时不应该有上下文切换。在这种情况下,互斥或信号量无济于事。很少需要,如果你的代码不是低级的,你可能没问题。