Linux Device Driver >> C/C++
kthread
參考資訊:
1. Source Code
Thread是執行的最小單位,在多核CPU上,產生的Thread可以同時的運作,這意謂著使用Thread技術可以用來改善效能,但是,每個Thread間的資料同步則是另一個課題
使用步驟:
1. kthread_create()
2. wake_up_process()
3. kthread_should_stop()
4. kthread_stop()
main.c
#include <linux/init.h> #include <linux/device.h> #include <linux/module.h> #include <linux/delay.h> #include <linux/kthread.h> MODULE_LICENSE("GPL"); MODULE_AUTHOR("Steward Fu"); MODULE_DESCRIPTION("Linux Driver"); struct task_struct *mykthread = NULL; static int kthread_handler(void *data) { printk("%s++\n", __func__); while (!kthread_should_stop()) { msleep(100); } printk("%s--\n", __func__); return 0; } int ldd_init(void) { mykthread = kthread_create(kthread_handler, NULL, "mykthread"); wake_up_process(mykthread); return 0; } void ldd_exit(void) { kthread_stop(mykthread); } module_init(ldd_init); module_exit(ldd_exit);
ldd_init: 產生多個Thread並且執行
kthread_handler: 列印字串
ldd_exit: 停止Thread執行
測試
# insmod /boot/main.ko kthread_handler++ # rmmod main kthread_handler--