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