我编写了一个 C 代码程序,它创建了许多执行相同操作的线程(pthreads)。这些线程中的每一个都尝试获取一个公共互斥体(这些线程之间共享一个二进制信号量)。当第一个线程设法获取互斥锁时,所有其他线程在执行 sem_wait(down)操作时会发现它不可用(计数器为 0)。现在,我想在内核级别做同样的事情,使用一个使用 Kthreads 的内核模块。我发现,Linux 内核线程不是抢占式的(我的内核上没有启用抢占式),因此,只要第一个 kthread 获取公共信号量,其他 kthread 就什么也不做,直到它完成。因此,在对其执行向下操作时,没有 kthread 会发现互斥锁不可用。对于我的练习,我需要时不时地让互斥锁不可用,当我进行向下操作时,就像使用 posix 线程(用户级别)的版本一样。我得到的一个建议是使用 schedule() 函数,该函数由 kthread 调用并导致 cpu 调度另一个 kthread 执行。但是,我不确定如何使用它。我不太了解我在互联网上找到的内容,因为我是内核编码的新手。有没有人有一个关于如何使用 schedule() 来抢占内核线程的例子?