如果我有兩個線程A和B在一個進程和線程A創建了一個定時器,由於定時器回調可以中斷任一線程,是否意味着訪問共享對象(線程和定時器回調之間)需要同步? 它也說定時器回調和應用程序線程之間的同步是不安全的,比如線程A鎖定了一個互斥mA,然後它被定時器回調中斷,在定時器回調中它也試圖鎖定mA,現在發生死鎖。 我在上述說法中是否正確?如果它是真的,定時器回調有很多限制,以避免同步問題。Linux環境中,定時器的回調和應用程序線程之間的同步
0
A
回答
0
相關的問題,如您帶來的信號最簡單的方法,是不是異步處理的信號。有幾種方法可以做到這一點。
首先,如果信號到達一個進程組,這是很好的做法,只有一個線程不會阻止信號。
接下來,精確的解決方案取決於你的程序的主循環是怎樣的。最有可能的是,這是一個圍繞select
/epoll
的循環。如果是這樣,請查看pselect
和epoll_pwait
,並確保你明白他們的意思。用這種方式處理你的信號意味着你的信號處理程序與你的實際程序同步運行,幾乎消除了所有的限制。
一個更好的解決方案(但只有一個是Linux)是不用信號處理程序處理信號,而是用signalfd
將它變成文件描述符。
最後,但絕非最不重要的,如果你想要的是處理文件描述符+基於定時器動作,有包裝,對於你在以業績爲導向的實施庫。您還可以免費獲得平臺獨立性。
兩個這樣的庫libevent
和libev
。
相關問題
- 1. 線程之間的回調同步
- 2. C#程序Windows和Linux之間的時間同步
- 3. PC應用程序和Android應用程序之間的同步
- 4. 多線程環境中的Linux高分辨率定時器?
- 5. 如何同步我的應用程序和服務器之間的時間?
- 6. 通過Jacob的Java應用程序和Microsoft應用程序之間的同步
- 7. 使用tbb線程之間的同步
- 8. WatchKit:在手錶和iPhone應用程序之間同步定時器?
- 9. hsqldb - 應用程序之間不同步
- 10. shellscript和c程序之間的同步
- 11. 在服務器和iOS應用程序之間同步數據
- 12. Android應用程序,Web和桌面應用程序之間的同步數據
- 13. 在iOS應用程序和Mac之間同步信息的應用程序
- 14. iPhone應用程序和Web應用程序之間的雙向同步
- 15. UI線程和更新線程之間的RecyclerView數據同步
- 16. 使用定時器和其他線程之間的臨界區的多線程Delphi同步
- 17. 更改部署和調試環境之間的GWT應用程序行爲
- 18. Erlang應用程序:不同的環境
- 19. 客戶端 - 服務器應用程序中的線程同步?
- 20. 許多應用程序服務器之間的同步
- 21. 移動應用程序和雲之間的數據同步
- 22. PC和Android之間的數據同步應用程序?
- 23. 本地網絡和Android應用程序之間的同步
- 24. 同步iPhone和iPad之間的核心數據應用程序
- 25. 在多線程環境中測量線程的執行時間
- 26. Linux,應用程序之間的通信
- 27. iPhone應用程序中的異步與同步與線程
- 28. 離線和在線同步HTML5中的Web應用程序?
- 29. 實時應用程序中多線程之間同步容器訪問的最佳方式
- 30. C#winforms應用程序線程同步
感謝您提供豐富的建議! 我們終於使用的忙檢查機制: 主循環使用消息隊列以接收傳入消息,每個環的第一與IPC_NOWAIT檢查消息隊列和處理它,如果有的話,然後,它會檢查定時器列表,以查看是否任何定時器到達並調用它。 使用pselect確實是一個完美的解決方案,但我們的情況是該庫需要在vxworks中使用。 是否知道vxworks中是否有類似的解決方案 - 提供一種很好的定時器解決方案,以同步方式運行回調? –
你把你的問題標爲'linux',所以我給你一個Linux答案。 'pselect'是一個Posix標準函數,但vxWorks不完全是Posix兼容的,所以我不知道你的解決方案在那裏。我建議再次詢問並標註爲vxWorks。 –