Файлы: threads.c, threads.h, threads_asm.S -- реализация блокировок lock и unlock, функция инициализации работы с многопоточностью setup_threading, функция создания потока create_thread, функция управления потоками schedule, функция exit, позволяющая потоку пометить себя "мёртвым" (она есть, но толком не нужна, потому что фактически делает из потока зомби; чтобы очистить ресурсы потока, ему необходимо, чтобы его кто-то дождался с помощью функции join (но да, join в своей работе exit использует)), функция join, позволяющая потоку дождаться завершения другого потока; функции switch_threads и init_stack используютс при переключении и создании потоков, соответственно, и, в целом, предназначены только для служебного использования(реализованы в threads_asm.S)
main.c -- функции many_test(), create_n_join_test() и cascade_test(int) проверяют работу с потоками