當多線程應用程序中的Linux發生分段錯誤並且處理程序被調用時,是否所有其他線程在調用處理程序之前立即停止? 那麼,在分段錯誤處理過程中是否可以執行任何parralel代碼,這是否合適呢? 謝謝。分段錯誤處理程序是線程安全的嗎?
回答
從signal(7)
手冊頁面:
可以產生的信號(以及因此待處理),用於處理作爲一個整體(例如,當使用發出殺(2))或用於一個特定的線程(例如,由於執行特定的機器語言指令而產生的某些信號,例如SIGSEGV和SIGFPE,都是線程控制的,就像使用pthread_kill(3)針對特定線程的信號一樣)。處理導向的信號可以被傳遞到當前沒有信號阻塞的任何一個線程。如果不止一個線程的信號未被阻塞,那麼內核會選擇一個任意線程來傳遞信號。
本段說某些信號,如SIGSEGV
,是線程特定的。哪個應該回答你的問題。
我看不到這段話的直接答案:它表示SIGSEGV將針對特定的線程,但沒有提到其他線程的命運。 – Slav 2012-08-14 06:25:24
@Slav老實說,如果你遇到分段錯誤,不管怎樣你都不可能繼續下去。遲些,錯誤將會級聯,並且整個過程將會消失。捕獲'SIGSEGV'只有在中止進程之前提供額外的日誌記錄纔有用,除非錯誤記錄在日誌代碼中,在這種情況下它仍然會死亡。 – 2012-08-14 06:50:33
我也這麼認爲,並且在seg-fault-handler中實現了一些「安全先發制人」任務。在這裏和那裏,我面臨着我使用的多個庫中的一些錯誤,並且希望不會錯過服務器中的任何兌現數據,但是如果服務器將保存修改數據的權利,那麼它將不會有用,當我將它保存在seg-fault-handler 。 – Slav 2012-08-14 07:34:23
- 1. 處理線程安全程序
- 2. 分段錯誤處理程序中的分段錯誤
- 3. 線程安全處理
- 4. GWTP處理程序是線程安全的?
- 5. java線程安全:線程安全嗎?
- 6. 是OSGI事件處理程序線程安全
- 7. 是java.sql.Connection線程安全嗎?
- 8. 是CreateChildContainer()線程安全嗎?
- 9. 是Thread.getStackTrace()線程安全嗎?
- 10. 是DocumentBuilder.parse()線程安全嗎?
- 11. 是javax.sql.DataSource線程安全嗎?
- 12. 是TcpClient.Available線程安全嗎?
- 13. 是sqlite.swift線程安全嗎?
- 14. 是winsock2線程安全嗎?
- 15. 是unique_ptr線程安全嗎?
- 16. 是SplittableRandom.split()線程安全嗎?
- 17. 線程安全(是嗎?)
- 18. 是IP2Location線程安全嗎?
- 19. 是System.DirectoryServices.AccountManagement.GroupPrincipal線程安全嗎?
- 20. 是Microsoft.Practices.EnterpriseLibrary.Data.Database.SetParameterValue線程安全嗎?
- 21. 是java.util.UUID線程安全嗎?
- 22. 是enumerateUsingBlock:線程安全嗎?
- 23. 是java.util.concurrent.Future線程安全嗎?
- 24. 是DatagramSocket.send線程安全嗎?
- 25. 是長線程安全嗎?
- 26. 是SpelExpression線程安全嗎?
- 27. 是UImage.AsPNG()線程安全嗎?
- 28. 是ArrayDescriptor線程安全嗎?
- 29. Android位圖多線程處理 - 不是線程安全的?
- 30. pthread_spin_trylock在多線程應用程序的sigsegv處理程序內是否安全?
你可以在一個簡單的程序中測試嗎?啓動兩個線程,一個使用自己的SIGSEGV處理程序。 SIGSEGV線程並將其從處理程序內部放入睡眠狀態。第一個線程運行在一個無限循環打印的東西。然後你自己回答你的問題。我不知道這是我自己,我有興趣學習 – 2012-08-14 06:42:15
這很簡單,但我試圖避免這樣的決定,如果我將運行和測試行爲,它將被證明僅用於特定的harware /軟件版本(gcc, libc,linux發行版,debug/release等等)。但有針對性的軟件運行在多個平臺上。 – Slav 2012-08-14 07:30:56