Boost.Thread темы не запускаются на iPhone/iPad в сборках выпуска

Мы пишем приложение для 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 ответ

Решение

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

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

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

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

Другие вопросы по тегам