如何使内核线程抢占?

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

链接地址: http://www.djcxy.com/p/84843.html

上一篇: how to make kernel threads preemptive?

下一篇: Mutex implementation and signaling