我有一个队列,在不同的中断发生时调用队列的put和pull函数。有没有办法在这种情况下防止竞争状况? 虽然我们不能等待中断服务例程中的信号量,但创建类似功能的最佳方式是什么。 我们使用Zynq FPGA的ARM-Cortex A5处理器来开发代码。ISR(中断服务程序)中的信号量同步
0
A
回答
1
假设每个中断都会导致处理器的“中断禁用”状态打开,并且假定您正在处理的中断具有相同的优先级(即不能中断另一中断的执行) ,那么已经不存在竞争条件,您的ISR可以访问共享队列。 (当发生中断时,处理器进入中断禁止模式,将所有寄存器压入堆栈,跳转到ISR入口点并继续执行,一旦ISR完成,“iret”指令执行反向操作这个简单的描述可以在不同的处理器和平台上以不同的方式实现)。
+0
请注意,无论从驱动程序处理程序线程正在进行的pop的哪个阶段,共享队列索引操作都必须能够使ISR可以安全地推送。 – ThingyWotsit
+0
@ThingyWotsit,你是对的。幸运的是,这个队列似乎只能在ISR中访问。否则,非ISR访问本身应执行中断禁用指令以进行安全访问。 –
相关问题
- 1. 为什么Windows设备驱动程序中断服务程序(ISR)是可中断的?
- 2. 线程应用程序的信号量同步失败,Python
- 3. 使用信号量同步进程
- 4. 处理服务器应用程序中的中断信号的最佳方式?
- 5. 信号量和同步
- 6. ISR中断服务程序和传统代码有什么区别?
- 7. 中断服务程序8086
- 8. 无法同步Java中的线程(使用信号量)
- 9. 线程同步和信号
- 10. 线程和进程同步的信号量和互斥量
- 11. 二进制信号量在C++中同步线程
- 12. 值0上的信号量同步
- 13. 如何在Mspgcc中声明一个中断处理程序(ISR)?
- 14. 客户端 - 服务器应用程序中的线程同步?
- 15. 多次中断信号量的问题
- 16. 移动服务同步处理程序
- 17. 带信号的同步线程
- 18. 与信号量共享内存同步
- 19. 使用信号量进行同步
- 20. ARC,信号量,转换坐标,同步
- 21. Python中的信号处理程序的乐趣中断选择
- 22. ISR和中断处理程序有区别吗?
- 23. 如何实现将同步Linux中同一程序的几个不同副本的信号量
- 24. 与Android应用程序中的服务器同步
- 25. 信号量和同步中的分段错误
- 26. 关于使用信号量进行线程同步的示例
- 27. 多进程同步 - 比信号量更好的选择?
- 28. C多个进程之间的UNIX信号量同步
- 29. 如何在多线程应用程序中用异步信号管理共享的POSIX信号量
- 30. 如何检测Vaadin应用程序中的服务器通信何时中断
C不知道ISR,你应该更具体地了解平台并理想地展示一些可编译的示例代码。在一个非常简单的情况下,在ISR内部防止中断可能就足够了。 –
@FelixPalmen感谢您的评论我会更新它 –
注意 - 您可以肯定地从ISR POST信号量单元 - 这是发信号通知I/O已完成的线程的最常用方式。确实,你一定不要试图等待:) – ThingyWotsit