Aumente os threads de tópicos no startup
-
22-09-2019 - |
Pergunta
Eu tenho um programa que traz e derruba vários fios ao longo de sua vida. Tudo funciona muito bem por um tempo, mas, eventualmente, eu recebo o seguinte rastreamento de pilha de despejo central.
#0 0x009887a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
#1 0x007617a5 in raise () from /lib/tls/libc.so.6
#2 0x00763209 in abort () from /lib/tls/libc.so.6
#3 0x003ec1bb in __gnu_cxx::__verbose_terminate_handler () from /usr/lib/libstdc++.so.6
#4 0x003e9ed1 in __cxa_call_unexpected () from /usr/lib/libstdc++.so.6
#5 0x003e9f06 in std::terminate () from /usr/lib/libstdc++.so.6
#6 0x003ea04f in __cxa_throw () from /usr/lib/libstdc++.so.6
#7 0x00d5562b in boost::thread::start_thread () from /h/Program/bin/../lib/libboost_thread-gcc34-mt-1_39.so.1.39.0
No começo, eu estava vazando fios e imaginei que o núcleo se devia ao atingir um limite máximo de número de roscas atuais, mas agora parece que esses problemas ocorrem mesmo quando eu não o fizer. Para referência, no núcleo acima, havia 13 threads ativos executando.
Eu fiz algumas pesquisas para tentar descobrir por que o Start_Thread iria núcleo, mas não encontrei nada. Alguém tem alguma ideia?
Solução
start_thread
está lançando uma exceção não capturada, veja quais exceções podem start_thread
Jogue e coloque um catch
Em torno dele para ver qual é o problema.
Outras dicas
Quais são os valores transportados por thread_resource_error? Parece que você pode ligar para o nativo_error () para descobrir.
Como este é um invólucro em torno do Pthreads, existem apenas algumas possibilidades - Eagin, Einval e Eperm. Parece que o Boost tem exceções, provavelmente jogaria para Einval e EPERM - ou seja, não suportado_thread_option () e Thread_permission_error ().
Isso praticamente deixa o EAGIN, então eu veria que você realmente não está excedendo os limites do sistema no número de threads. Você tem certeza de que está se juntando a eles ou, se destacados, eles realmente se foram?