代码之家  ›  专栏  ›  技术社区  ›  KayEss

Boost.iPhone/iPad版本中没有启动线程

  •  2
  • KayEss  · 技术社区  · 14 年前

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

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

    查看主线程所在的调试器 boost::thread::start_thread (实际上在里面 boost::detail::yield 在内部 boost::detail::spin_lock::lock ).

    CPU没有达到100%,所以看起来自旋锁并没有耗尽新线程的创建。

    我们已经尝试了Boost 1.42和boost1.44,它们的行为都是一样的。iOS3.2和4.2都在发布版本中失败。

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

    1 回复  |  直到 14 年前
        1
  •  6
  •   KayEss    14 年前

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

    原来有一个自旋锁的ARM实现,用于非拇指构建。由于thumb构建的方式,很容易混合thumb和非thumb构建(即,没有thumb的build Boost和有thumb的xCode构建)。这就是我们所做的,这意味着自旋锁将永远不会收到信号,只会永远阻塞。

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

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