在发布版本中,Boost.Thread线程无法在iPhone / iPad上启动

时间:2010-11-17 03:39:24

标签: iphone multithreading ipad boost boost-thread

我们正在编写一个具有大量后台处理功能的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都在发布版本中失败。

我们可能做错了什么,或者这是一个已知的无效配置?

1 个答案:

答案 0 :(得分:6)

我们现在已经解决了这个问题。问题在于构建选项,并且线索是失败的自旋锁。

事实证明,有一个自旋锁的ARM实现,用于非拇指构建。由于完成拇指构建的方式,很容易混合拇指和非拇指构建(即,不用拇指构建Boost并用拇指构建xCode)。这就是我们正在做的事情,这意味着自旋锁永远不会被发出信号,只会永远阻止。

因此,要解决此问题,请确保您为所有库使用相同的拇指构建选项!

此主题讨论了问题:http://groups.google.com/group/boost-list/browse_thread/thread/7dc1e80659182ab3