我有一個大部分用C編寫的庫,它的某些部分應該是線程安全的,我使用全局自旋鎖來保護代碼的關鍵部分。__try/__終於等同於UNIX
現在我的問題是:
我應該叫用戶的一些回調從一個自旋鎖,並且在情況下保護那些回調產生異常的關鍵部分,在Windows裏面我有一個_ 嘗試/即使在發生錯誤時,也可以通過C最終離開關鍵部分。我可以在UNIX上完成這個嗎?
我有一個大部分用C編寫的庫,它的某些部分應該是線程安全的,我使用全局自旋鎖來保護代碼的關鍵部分。__try/__終於等同於UNIX
現在我的問題是:
我應該叫用戶的一些回調從一個自旋鎖,並且在情況下保護那些回調產生異常的關鍵部分,在Windows裏面我有一個_ 嘗試/即使在發生錯誤時,也可以通過C最終離開關鍵部分。我可以在UNIX上完成這個嗎?
這被稱爲結構化異常處理。它可以通過使用setjmp
和longjmp
來完成。它已經在C中使用了很長時間。看到這個細節:http://www.freetype.org/david/reliable-c.html
也許應該強調,這樣的解決方案完全獨立於操作系統,只有C。它甚至應該與MS提供的C版本一起工作。 –
@JensGustedt這是他們在1979年做過的那種異常處理 –
非常感謝你的不錯答案 – BigBoss
奇怪的是,這個問題被忽略,這裏通常有很多* nix用戶。所以只是一個SEH用戶的一個蹩腳的評論:它在* nix上**非常不同,你必須修補信號。谷歌的「unix陷阱信號」看起來很有希望。 –
@HansPassant,不用你不必使用信號。關於'setjmp'的答案應該足夠了。這是C預見到的將堆棧解放到給定點的機制。 –
嗯,你能記錄一下需要jmp_buf的unix系統調用,以便它可以正確調用long_jmp()嗎? –