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