У меня есть программа, которая запускает поток, а затем ждет завершения этого потока, прежде чем он вернется. Код примерно такой:
int main(int32_t argc, char* argv[]) {
pthread_t t;
/* initialization and other stuff
...
*/
printf("join result:%d\n", pthread_join(t, 0));
return 0;
}
Программа печатает, как положено: join result: 0
. Таким образом, объединение работает, и t завершено. Тем не менее программа не останавливает выполнение. Я могу заставить его остановиться, только если вставлю команду exit(0)
(или какой-то другой номер) перед строкой return 0
.
Однако, если я удалю строку с вызовом pthread_join
, программа завершится без ошибок.
Как это вообще возможно? Что может помешать программе завершить выполнение после объединения всех подпотоков?
EDIT: я только что узнал, что gdb сообщает мне, что я получаю ошибку сегментации после выполнения последней строки с }
. Тем не менее, я понятия не имею, что происходит за кулисами:
Program received signal SIGSEGV, Segmentation fault.
0x000000060003aa10 in ?? ()
printf
? В любом случае у меня есть только один основной поток, который создает и присоединяется к другим потокам. - person Bastian   schedule 20.06.2014-Wall -Wextra -pedantic
. Работает ли он без ошибок при проверке памяти, такой как Valgrind (valgrind.com)? - person alk   schedule 20.06.2014