У меня есть многопоточное приложение, в котором я создаю несколько потоков и выполняю pthread_join
по завершении.
Основной поток порождает потоки и ожидает на pthread_join()
присоединения рабочих потоков. Я сталкиваюсь с проблемой, когда главный поток ожидает бесконечно в pthread_join()
, и все рабочие потоки закрылись, что привело к зависанию программы. Я определил, что все рабочие потоки вышли, проверив info thread
на GDB, поскольку в нем перечислены только основные потоки. Известно, что вызов pthread_join()
в вышедшем потоке вернется немедленно. Но это кажется другим. Это трассировка стека GDB.
#0 0x00007f45fefebeec in __lll_lock_wait_private () from /lib64/libc.so.6
#1 0x00007f45fef68a6f in _L_lock_5333 () from /lib64/libc.so.6
#2 0x00007f45fef62408 in _int_free () from /lib64/libc.so.6
#3 0x00007f45ffbe5088 in _dl_deallocate_tls () from /lib64/ld-linux-x86-64.so.2
#4 0x00007f45ff9bde67 in __free_stacks () from /lib64/libpthread.so.0
#5 0x00007f45ff9bdf7f in __deallocate_stack () from /lib64/libpthread.so.0
#6 0x00007f45ff9bff93 in pthread_join () from /lib64/libpthread.so.0
#7 0x00007f45f87a6fe1 in waitForWorkerThreadsToExit () at src/server.c:133
#8 ServerLoop (arg=<optimized out>) at src/server.c:662
#9 0x00007f45ff9bee25 in start_thread () from /lib64/libpthread.so.0
#10 0x00007f45fefde34d in clone () from /lib64/libc.so.6
Я на CentOS7 and Linux kernel 3.10
Может кто-нибудь помочь? ТИА