Моя основная тема использовала pthread_create() для создания дочерних потоков. В обработчике отключения (сингл-обработчик для SIGINT и SIGTERM) основного потока я хочу использовать pthread_cancel для завершения всех остальных потоков. Но у меня есть malloc() в этих потоках, как освободить эти воспоминания?Как освободить память в дочерних потоках?
ответ
Вы должны обратиться http://man7.org/linux/man-pages/man3/pthread_kill.3.html
Инструкция pthread_kill посылает сиговый сигнал к указанной теме. Сигнал, который нужно отправить, определяется sig и является либо нулевым, либо одним из сигналов из списка определенных сигналов в файле заголовка. Если sig равен нулю, выполняется проверка ошибок, но ни один сигнал не отправляется в целевой поток.
pthread_kill, однако, не убивает нить. Если этот сигнал завершает процесс, то весь процесс прекращает, а вместе с ним и любую динамически выделяемую память любым потоком процесса.
Невозможно убить нить.
Ну, нет способа убить нить, если вы не ОС. –
Используя текущую реализацию pthread в Linux, вполне возможно убить только определенный поток. @MartinJames Однако это не переносимо, поэтому нехорошо сделать это. – alk
@alk - это единственный способ прекратить/убить поток. ОС - единственное, что имеет инструменты для этого. Это невозможно сделать из кода пользователя. pthread lib. просто просит ОС убить его. Пользовательский код не может остановить поток, выполняющийся на другом ядре, - для этого требуется действие межядерных драйверов, и только ОС имеет доступ к драйверу. –
- 1. Как освободить/освободить память в игре android
- 2. Освободить память
- 3. Как освободить виртуальную память?
- 4. Как освободить память?
- 5. Как освободить память?
- 6. Как освободить память?
- 7. PtrToStringChars, как освободить память?
- 8. Informix - как освободить память?
- 9. Как освободить память в go?
- 10. Как освободить память в функции
- 11. Как освободить память в .NET?
- 12. Как освободить память в Perl
- 13. Как освободить память в Perl?
- 14. как освободить память в C++
- 15. Как освободить память в iphone?
- 16. Как освободить память в C
- 17. Как освободить память в C?
- 18. Освободить память в R
- 19. Освободить память в GridView
- 20. Освободить память в Julia
- 21. Как освободить память сохраненного объекта
- 22. Как освободить память, созданную SKTexture
- 23. Как освободить память, выделенную cdev_alloc?
- 24. Как я могу освободить память?
- 25. Как освободить память, выделенную функцией
- 26. Как освободить память объекта Qthread?
- 27. Как освободить память, используемую lxml.etree?
- 28. попробуйте наконец, как освободить память
- 29. Как освободить память, выделенную Swingworker?
- 30. Как освободить память, выделенную gcnew?
http://man7.org/linux/man-pages/man3/pthread_cleanup_push.3.html - не так ли? – someuser
«Как освободить эти воспоминания?» - Не беспокойтесь, не пытайтесь. –