relibc освобождает блок потока при detach и join, а не при выходе
04.07.2026Блок управления потоком (TCB) в relibc теперь освобождается при detach или join, а не в момент выхода потока. Прежняя схема оставляла его жить до конца работы потока, из-за чего ресурсы не освобождались там, где это ожидалось.
Что такое TCB
TCB — служебная структура, описывающая поток для самой операционной системы: где его стек, счётчик ссылок, состояние, признак инициализации. Это первое, к чему обращается планировщик, когда решает, кому дать процессор, и первое, что нужно при освобождении потока.
Почему момент освобождения важен
Когда поток завершается, его ресурсы обычно освобождаются сразу. Здесь освобождение TCB было отложено: структура жила, пока поток ещё существует как объект. Из-за этого pthread_join не давал обещанного эффекта — после него память, занятая потоком, оставалась занята.
В программе на Rust это проявляется там, где освобождение памяти после join важно: программы с большим числом короткоживущих потоков, нагрузочные тесты, пулы, где за час создаются миллионы потоков. Накопление таких блоков — это утечка, которая не видна по счётчикам собранной памяти.
Оригинал
Коммит Dealloc TCB on detach/join rather than exit. от 4 июля 2026 года в репозитории redox-os/relibc
Упоминаний: 1 · Просмотров: 3