Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top