Как сделать потоки ядра упреждающими?
Я написал программу на С-коде, которая создает много потоков (pthreads), которые делают все то же самое. Каждый из этих потоков пытается получить общий мьютекс (один двоичный семафор, общий для этих потоков). Когда первому потоку удается получить мьютекс, все остальные потоки обнаружат, что он недоступен (счетчик в 0), когда они выполняют операцию sem_wait (down). Теперь я хочу сделать то же самое на уровне ядра, с модулем ядра, который использует Kthreads. Что я обнаружил, так это то, что потоки ядра Linux не являются вытесняющими (вытеснение не включено в моем ядре), поэтому, как только первый kthread получает общий семафор, остальные ничего не делают, пока он не завершится. Таким образом, kthread не найдет мьютекс, недоступный при выполнении операции down. Для моего упражнения мне нужно, чтобы мьютекс был недоступен, время от времени, когда я выполняю операцию down, как это происходит с версией с потоками posix (уровень пользователя). Один из советов, который я получил, - это использовать функцию schedule(), которая вызывается kthread и заставляет процессор планировать другой kthread для выполнения. Однако я не уверен, как его использовать. Я не очень хорошо понимаю, что я нашел в Интернете, так как я новичок в кодировании ядра. У кого-нибудь есть пример, как использовать schedule() для вытеснения потоков ядра?