Boost.thread Threads не начинается на iPhone / iPad в Release Builds
-
25-09-2019 - |
Вопрос
Мы пишем приложение 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 оба терпят неудачу с помощью выпуска.
Что мы, вероятно, делаем неправильно, или это известная неработающая конфигурация?
Решение
Мы сейчас работали это. Проблема находится в параметрах сборки, и подсказка заключается в том, что это спиновые замки, которые не могут.
Оказывается, что существует внедрение руки спиновой блокировки, которая используется в не больших настраиваемых. Из-за того, как сделано, что сборки большого пальца сделаны, очень легко смешивать большой палец и не большие сборки (т. Е. Устройство построения без больших пальцев и иметь Xcode Build с большим пальцем). Это то, что мы делаем, и это означает, что спиновой замок никогда не будет сигнализироваться и просто будет блокировать навсегда.
Итак, чтобы решить это, убедитесь, что вы используете те же параметры сборки большого пальца для всех ваших библиотек!
Эта тема обсуждает проблему: http://groups.google.com/group/boost-list/browse_thread/thrad/7dc1e80659182ab3