我目前正在开发一个多线程应用程序,该应用程序将部署在 arm 和 ppc 架构上。我对手臂上的 pthread_cancel 有一些问题。
arm 上的 pthread_cancel 与 ppc 的行为不同。线程被取消,但线程局部变量的析构函数没有在 arm 上调用。我还尝试明确定义通过 pthread_cleanup_push 安装的取消清理处理程序例程。但是当线程被取消时它不会被调用。
该代码适用于 ppc。当线程被取消时,将调用局部变量的析构函数。当我明确定义一个清理处理程序时,它在调用 pthread_cancel 时被调用并执行。
我错过了什么吗?也许一些编译器选项?
- 编程语言:C++
- 编译器:arm-linux-g++/powerpc-linux-g++
- 操作系统:Linux
编辑:
我在这个libc bug上发现了一种类似的问题。
使用 gcc 而不是 g++ 并添加 -fno-exception 编译器选项就可以了。但我真的很想了解这个问题背后的东西。此外,-fno-exception 意味着我将无法在我的应用程序中执行异常处理,并不是说我现在正在使用它,但我可能会在将来使用它。
谢谢。