Внутри ядра - любой поток или процесс - прерывается обычным вводом таймера или прерыванием во время вызова ввода-вывода.Это возвращает передачу управления в планировщик ядра.
Переключение потока выполняется планировщиком, который решает, какой поток будет следующим выполнимым.
Теперь, если вы хотите смоделировать почти это - вам нужно заставить поток выполнять некоторые конечные задачи и подключаться в ожидании некоторых семафоров / мьютексов.Существует некоторый главный поток, который держит эти мьютекс / семафоры под контролем.Главный поток каким-то образом запускает нужный алгоритм, чтобы решить, к какому потоку должен быть предоставлен доступ.
Единственное реальное отличие состоит в том, что поскольку ваш главный поток находится в пользовательском пространстве, а не внутри ядра, он не может на самом деле отменять и / или выгружать запущенные потоки.Он может контролировать только то, насколько эффективно может быть эффективно распределено задание (между потоками с хорошим поведением).
Это очень простой первый шаг к пониманию проблемы.Пожалуйста, добавьте больше деталей для работы над предметом.Изменить свой вопрос, чтобы развить свой ответ.