2

私たちは非常に多くのバックグラウンド処理を行う 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 の両方がリリース ビルドで失敗します。

何が間違っている可能性がありますか、またはこれは既知の機能しない構成ですか?

4

1 に答える 1

6

これで解決しました。問題はビルド オプションにあり、手がかりはスピン ロックが失敗していることです。

Thumb 以外のビルドで使用されるスピン ロックの ARM 実装があることが判明しました。サム ビルドの方法により、サム ビルドと非サム ビルドを簡単に混在させることができます (つまり、サムを使用せずに Boost をビルドし、サムを使用して xCode をビルドします)。これは私たちが行っていたことであり、これは、スピン ロックがシグナルを受け取ることはなく、永久にブロックされることを意味します。

したがって、これを解決するには、すべてのライブラリで同じサム ビルド オプションを使用していることを確認してください。

このスレッドで問題について説明しています: http://groups.google.com/group/boost-list/browse_thread/thread/7dc1e80659182ab3

于 2010-11-22T13:24:17.137 に答える