LINUX.ORG.RU

Linux + pthread глюки


0

0

Привет всем!

Столкнулся с непонятной причиной - досрочным завершением работы pthread...

Вот пример:

#include <iostream>

#include <pthread.h>
#include <errno.h>

pthread_t thread1;

void start ( void ) {
for ( int i = 0; i < 100000; ++i ) {
std::cout << i << std::endl;
}
std::cout << "Happy End!" << std::endl;
}

void * threadFunc ( void * data ) {
start();
return NULL;
}

int main ( void ) {
std::cout << "RET CODE: " << pthread_create ( &thread1, NULL, threadFunc, NULL ) << std::endl;
return 0;
}

g++ test.cpp -o test -lpthread

Программа должна в фоновом режиме вывести на консоль все 9999 чисел и написать Happy End!

При запуске каждый раз прога доходит до определенного числа и все... ни ошибки ни чего... Просто завершается.

вот что получилось:

...
2642
2643
2644
2645
2646
$

Все... и никаких ошибок. Каждый раз доходит до разных чисел.
Не понимаю в чем причина у меня это кусок раньше работал, а потом заметил что перестал работать должным образом.
Возможно причина в параметрах Linux ядра?

Остальные проги нормально работают, хотя в GNU/Linux много прог хочет pthread... Почему это не работает?

Зарание спасибо!

anonymous

Имхо все работает как надо. С какой стати основной поток должен ждать завершения дочернего?

imp ★★
()
Ответ на: комментарий от Dark_SavanT

> а join сделать?

Да вроде я так и понял... Но смотрю раньше работающий код - нету join :)

попробовал join вроде работает... нужно позже проверить на графике это...

anonymous
()
Ответ на: комментарий от imp

> Имхо все работает как надо. С какой стати основной поток должен ждать > завершения дочернего?

проблема не в этом, а в том, что
libc, поддерживающая NPTL, использует для завершения процесса не __NR_exit, а __NR_exit_group

rei3er
()
Ответ на: комментарий от rei3er

> проблема не в этом, а в том, что libc, поддерживающая NPTL, использует для завершения процесса не __NR_exit, а __NR_exit_group

mmm.. ну и что собственно? без pthread_join приложение всё равно некорректно с точки зрения ожидаемого.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

> mmm.. ну и что собственно?

да ничего
это просто причина

rei3er
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.