【问题标题】:Boost.Thread threads not starting on the iPhone/iPad in release buildsBoost.Thread 线程在发布版本中未在 iPhone/iPad 上启动
【发布时间】:2011-05-11 05:14:04
【问题描述】:

我们正在编写一个带有大量后台处理的 iPad 应用程序,所有这些都是用一组 C++ 库编写的。这些库在 Linux、Mac 和 Windows 上运行良好,但在 iPad 上只能在调试版本中运行。

在发布版本中,看起来当第一个子线程被启动时,它要么从未真正启动,要么在处理过程中没有足够远以允许主线程继续(不是很如果由于在发布版本中使用断点的正常问题,线程实际上是否正在启动,那么从调试器中可以明显看出)。

在调试器中查看主线程位于boost::thread::start_thread 中(实际上在boost::detail::yieldboost::detail::spin_lock::lock 中)。

CPU 未达到 100%,因此自旋锁似乎不会导致新线程的创建处于饥饿状态。

我们尝试了 Boost 1.42 和 Boost 1.44,它们的行为方式相同。 iOS 3.2 和 4.2 都失败了发布版本。

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

【问题讨论】:

    标签: iphone multithreading ipad boost boost-thread


    【解决方案1】:

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

    事实证明,在非拇指构建中使用了自旋锁的 ARM 实现。由于拇指构建的完成方式,很容易混合拇指构建和非拇指构建(即,在没有拇指的情况下构建 Boost 并使用拇指构建 xCode)。这就是我们所做的,这意味着自旋锁永远不会收到信号,只会永远阻塞。

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

    本帖讨论问题:http://groups.google.com/group/boost-list/browse_thread/thread/7dc1e80659182ab3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-11
      • 2011-12-20
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      相关资源
      最近更新 更多