2012-10-21 49 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