我有一個隊列,在不同的中斷髮生時調用隊列的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