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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top