Я использую общую библиотеку, которая создает рабочие потоки во время инициализации. Приложение связано с uClibc. Когда он возвращается из main(), он сбой в __pthread_cond_wait()
или аналогичный из рабочего потока, что общая библиотека не останавливается должным образом из своего кода cleanup(). Основной() стек потока, когда он выходит из строя является:uClibc shared libs разгрузка во время выхода()
#0 _dl_munmap from uClibc.so
#1 _dl_fini
#2 __GI_exit
#3 __uClibc_main
Поскольку у меня нет источника для общей библиотеки я не могу исправить очищающий код уборщицы, но мой вопрос:
Почему потоки все еще работают (сбой), как только uClibc начинает выгружать общие библиотеки? Я предполагаю, что он выгружает их из записи стека _dl_munmap
выше. Есть ли способ убедиться, что все потоки приостановлены/остановлены при выходе из main()?
Могу ли я предположить, что поведение posix в том, что потоки все еще могут выполняться, а libc - это munmap() 'shared libs at exit? – patraulea