Kay*_*Ess 2 iphone multithreading boost boost-thread ipad
我们正在编写一个具有大量后台处理功能的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都失败了发布版本.
我们可能做错了什么,或者这是一个已知的不工作配置?
我们现在已经解决了这个问题.问题在于构建选项,并且线索是它是失败的自旋锁.
事实证明,有一个自旋锁的ARM实现,用于非拇指构建.由于拇指构建的方式已完成,因此很容易混合拇指和非拇指构建(即,不用拇指构建Boost并使用拇指构建xCode).这就是我们正在做的事情,这意味着自旋锁永远不会被发出信号并且永远会阻止.
因此,要解决此问题,请确保您为所有库使用相同的拇指构建选项!
该主题讨论了该问题:http://groups.google.com/group/boost-list/browse_thread/thread/7dc1e80659182ab3
| 归档时间: |
|
| 查看次数: |
704 次 |
| 最近记录: |