LINUX.ORG.RU

Вопрос про потоки.


0

0

Такой вопросик: Есть приложение, которое при своём запуске создает несколько вспомогательных потоков. При этом, основной поток (т.е. тот поток, на котором происходит выполнение main()) становится ненужным. Можно ли каким-либо образом завершить его не завершая всего приложения?

Спасибо за ответы.

anonymous

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

Вместе с приложением :)

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

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

Кусочек кода можно? А то непонятно, что конкретно тебе посоветовать...

mutable
()

> Можно ли каким-либо образом завершить его не завершая
> всего приложения?

просто сделать _exit(). linux (я говорю о ядре)
не будет принудительно завершать другие потоки.

для того, чтобы завершить весь процесс, нужна
sys_exit_group().

другое дело, что бибилиотека, которую вы используете
(linuxthreads, да?) может использовать on_exit()
для завершения всего процесса, поэтому вызов exit()
может так себя вести.

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

idle:

LinuxThreads в manager thread с некоторой периодичностью проверяет живучесть родителя:

    /* Check for termination of the main thread */
    if (getppid() == 1) {
      pthread_kill_all_threads(SIGKILL, 0);
      _exit(0);
    }

Обмануть эту проверку будет сложно. 


P.S. Проще попытаться сделать некую симметрию между нитями с ожиданием в главной.

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

> LinuxThreads в manager thread с некоторой периодичностью
> проверяет живучесть родителя:

не поверил, нашел исходники, посмотрел. так и есть, обалдеть.

интересно, а на фига это сделано? или какие-то стандарты велят?

в nptl этого, кажется, нет.

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

Вопрос в другом.

А нафига Вам звершать родителя а нити оставлять?
Есть технология нитей и вот так она работает, можно изобрести новую которая будет работать по другому и назвать сверх легкие нити.

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

>интересно, а на фига это сделано? или какие-то стандарты велят?

LinuxThreads и стандарты несовместимы. :)

Murr ★★
()

А на кой до сих пор использовать obslolete LinuxThreads?

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