Threads boost.thread não iniciando no iPhone/iPad nas compilações de lançamento
-
25-09-2019 - |
Pergunta
Estamos escrevendo um aplicativo para iPad com bastante processamento em segundo plano, o que está escrito em um conjunto de bibliotecas C ++. Essas bibliotecas funcionam bem no Linux, Mac e Windows, mas no iPad eles funcionam apenas nas compilações de depuração.
Nas construções de lançamento, parece que quando o primeiro subdread está sendo girado, ele nunca começa, ou não fica longe o suficiente em seu processamento para permitir que o tópico principal continue (não é muito óbvio a partir do Depurador se o thread estiver realmente começando ou não devido ao problema normal de usar pontos de interrupção nas compilações de liberação).
Olhando no depurador, o tópico principal fica em boost::thread::start_thread
(Na verdade, dentro boost::detail::yield
dentro de boost::detail::spin_lock::lock
).
A CPU não está a 100%, por isso não parece que o bloqueio de spin esteja morrendo de fome a criação do novo encadeamento.
Tentamos o Boost 1.42 e o Boost 1.44 e os dois se comportam da mesma maneira. O iOS 3.2 e 4.2 falham nas compilações de liberação.
O que provavelmente estamos fazendo de errado ou é uma configuração não que não funciona?
Solução
Nós agora resolvemos isso. O problema está nas opções de construção, e a pista é que são as fechaduras que estão falhando.
Acontece que existe uma implementação do braço da trava de spin que é usada em construções que não são de Thumb. Devido à maneira como as construções do polegar são feitas, é muito fácil misturar builds de polegar e não-Thumb (ou seja, construir um impulso sem polegar e fazer o Xcode construir com o polegar). É isso que estávamos fazendo, e isso significa que o bloqueio de spin nunca será sinalizado e apenas bloqueará para sempre.
Portanto, para resolver isso, verifique se você está usando as mesmas opções de construção de polegar para todas as suas bibliotecas!
Este tópico discute o problema: http://groups.google.com/group/boost-list/browse_thread/thread/7dc1e80659182ab3