Boost.Thread темы не запускаются на iPhone / iPad в сборках выпуска - PullRequest
2 голосов
/ 17 ноября 2010

Мы пишем приложение для iPad с довольно большой фоновой обработкой, которая написана в виде набора библиотек C ++.Эти библиотеки прекрасно работают на Linux, Mac и Windows, но на iPad они работают только в отладочных сборках.

В релизных сборках похоже, что когда запускается первый подпоток, он либо вообще не запускается,или он не заходит достаточно далеко в своей обработке, чтобы позволить основному потоку продолжаться (это не очень очевидно из отладчика, если поток фактически запускается или нет из-за обычной проблемы использования точек останова в сборках выпуска).

Глядя в отладчик, главный поток находится в boost::thread::start_thread (фактически внутри boost::detail::yield в boost::detail::spin_lock::lock).

Процессор не на 100%, поэтому он не отображаетсячто спин-блокировка истощает создание нового потока.

Мы пробовали и Boost 1.42, и Boost 1.44, и они оба ведут себя одинаково.И iOS 3.2, и 4.2 оба терпят неудачу с выпусками сборки.

Что мы, вероятно, делаем неправильно, или это известная нерабочая конфигурация?

1 Ответ

6 голосов
/ 22 ноября 2010

Теперь мы с этим разобрались.Проблема заключается в параметрах сборки, и подсказка заключается в том, что происходит сбой спин-блокировок.

Оказывается, есть реализация ARM спин-блокировки, которая используется в сборках без большого пальца.Из-за того, как выполняются сборки большого пальца, очень легко смешивать сборки большого пальца и не большого пальца (т. Е. Сборка Boost без большого пальца и сборка xCode с большим пальцем).Это то, что мы делали, и это означает, что спин-блокировка никогда не будет сигнализироваться и будет просто блокироваться навсегда.

Итак, чтобы решить эту проблему, убедитесь, что вы используете те же параметры сборки большого пальцадля всех ваших библиотек!

В этой теме обсуждается проблема: http://groups.google.com/group/boost-list/browse_thread/thread/7dc1e80659182ab3

...