2014-04-03 1 views
1

Моя основная тема использовала pthread_create() для создания дочерних потоков. В обработчике отключения (сингл-обработчик для SIGINT и SIGTERM) основного потока я хочу использовать pthread_cancel для завершения всех остальных потоков. Но у меня есть malloc() в этих потоках, как освободить эти воспоминания?Как освободить память в дочерних потоках?

+1

http://man7.org/linux/man-pages/man3/pthread_cleanup_push.3.html - не так ли? – someuser

+0

«Как освободить эти воспоминания?» - Не беспокойтесь, не пытайтесь. –

ответ

0

Вы должны обратиться http://man7.org/linux/man-pages/man3/pthread_kill.3.html

Инструкция pthread_kill посылает сиговый сигнал к указанной теме. Сигнал, который нужно отправить, определяется sig и является либо нулевым, либо одним из сигналов из списка определенных сигналов в файле заголовка. Если sig равен нулю, выполняется проверка ошибок, но ни один сигнал не отправляется в целевой поток.

pthread_kill, однако, не убивает нить. Если этот сигнал завершает процесс, то весь процесс прекращает, а вместе с ним и любую динамически выделяемую память любым потоком процесса.

Невозможно убить нить.

+0

Ну, нет способа убить нить, если вы не ОС. –

+0

Используя текущую реализацию pthread в Linux, вполне возможно убить только определенный поток. @MartinJames Однако это не переносимо, поэтому нехорошо сделать это. – alk

+0

@alk - это единственный способ прекратить/убить поток. ОС - единственное, что имеет инструменты для этого. Это невозможно сделать из кода пользователя. pthread lib. просто просит ОС убить его. Пользовательский код не может остановить поток, выполняющийся на другом ядре, - для этого требуется действие межядерных драйверов, и только ОС имеет доступ к драйверу. –

Смежные вопросы