2012-10-21 64 views
0

我有一個大部分用C編寫的庫,它的某些部分應該是線程安全的,我使用全局自旋鎖來保護代碼的關鍵部分。__try/__終於等同於UNIX

現在我的問題是:
我應該叫用戶的一些回調從一個自旋鎖,並且在情況下保護那些回調產生異常的關鍵部分,在Windows裏面我有一個_ 嘗試/即使在發生錯誤時,也可以通過C最終離開關鍵部分。我可以在UNIX上完成這個嗎?

+0

奇怪的是,這個問題被忽略,這裏通常有很多* nix用戶。所以只是一個SEH用戶的一個蹩腳的評論:它在* nix上**非常不同,你必須修補信號。谷歌的「unix陷阱信號」看起來很有希望。 –

+0

@HansPassant,不用你不必使用信號。關於'setjmp'的答案應該足夠了。這是C預見到的將堆棧解放到給定點的機制。 –

+0

嗯,你能記錄一下需要jmp_buf的unix系統調用,以便它可以正確調用long_jmp()嗎? –

回答

1

這被稱爲結構化異常處理。它可以通過使用setjmplongjmp來完成。它已經在C中使用了很長時間。看到這個細節:http://www.freetype.org/david/reliable-c.html

+0

也許應該強調,這樣的解決方案完全獨立於操作系統,只有C。它甚至應該與MS提供的C版本一起工作。 –

+0

@JensGustedt這是他們在1979年做過的那種異常處理 –

+0

非常感謝你的不錯答案 – BigBoss