我们正在编写一个带有大量后台处理的 iPad 应用程序,所有这些都是用一组 C++ 库编写的。这些库在 Linux、Mac 和 Windows 上运行良好,但在 iPad 上它们只能在调试版本中运行。
在发布版本中,看起来当第一个子线程被启动时,它要么从未真正启动,要么在处理过程中没有足够远以允许主线程继续(从调试器是否由于在发布版本中使用断点的正常问题导致线程实际上正在启动)。
在调试器中查看主线程所在的位置boost::thread::start_thread
(实际上在里面boost::detail::yield
)boost::detail::spin_lock::lock
。
CPU 未达到 100%,因此自旋锁似乎不会导致新线程的创建处于饥饿状态。
我们已经尝试过 Boost 1.42 和 Boost 1.44,它们的行为方式相同。iOS 3.2 和 4.2 都失败了发布版本。
我们可能做错了什么,或者这是一个已知的不工作配置?