Я пытаюсь реализовать пользовательские потоки в ядре Linux 2.4, и я столкнулся с чем-то проблематичным и неожиданным.
Справочная информация: поток в основном выполняет одну функцию и умирает, за исключением того, что когда я вызываю thread_create в первый раз, он также должен превратить main () в поток (по умолчанию это не поток до первого вызова, что также, когда все связанные структуры данных выделены).
Поскольку поток выполняет функцию и умирает, нам не нужно никуда "возвращаться" вместе с ней, но нам нужно сохранить возвращаемое значение, которое позже будет возвращено с помощью thread_join, поэтому взлом, который я придумал, был: когда я выделяю стек потоков, я помещаю адрес возврата, который указывает на функцию thread_return_handler, которая освобождает поток, делает его зомби и сохраняет его возвращаемое значение для дальнейшего использования.
Это работает для потоков "просто запусти функцию и умри", но очень проблематично с основным потоком. Так как это на самом деле основная функция, если она возвращается до того, как другие потоки завершают работу, запускается нормальный механизм возврата и освобождает все общие ресурсы, тем самым облажая все работающие потоки.
Мне нужно помешать этому. Любые идеи о том, как это можно сделать?