工作隊列 例子

來源:互聯網
上載者:User

接著 上一篇  “工作隊列 的變化”

寫了個例子,代碼如下:

 

#include <linux/workqueue.h><br />#include <linux/module.h> // kmalloc ...<br />#include <linux/sysctl.h><br />int submit_work(void (*func)(struct work_struct *work), void* data);<br />struct workqueue_struct* wq = NULL;<br />typedef struct {<br />void* data_for_work;<br />struct work_struct my_work;<br />} mydrv_t;<br />void func(struct work_struct *work)<br />{<br />mydrv_t* mydrv = container_of(work, mydrv_t, my_work);<br />printk("In func: %d received./n", (int)(mydrv->data_for_work));<br />}<br />/* Driver initialization */<br />static int __init mydrv_init(void)<br />{<br />int data = 1;<br />printk("Hello, small world!/n");<br />wq = create_singlethread_workqueue("g_queue");<br />submit_work(func, (void*) data);<br />submit_work(func, (void*)(data + 1));</p><p>return 0;<br />}<br />/* Work submission. The first argument is the work function,<br /> and the second argument is the argument to the work function */<br />int submit_work(void (*func)(struct work_struct *work), void * data)<br />{<br />mydrv_t* test;<br />test = (mydrv_t*)kmalloc(sizeof(mydrv_t), GFP_KERNEL);<br />memset(test, 0, sizeof(mydrv_t));<br />/* Init the work structure */<br />INIT_WORK(&(test->my_work), func);</p><p>test->data_for_work = data;<br />/* Enqueue Work */<br />queue_work(wq, &(test->my_work));<br />return 0;<br />}<br />static void mydrv_exit(void)<br />{<br />printk("cruel world, /n bye ,my dear!/n");<br />destroy_workqueue(wq);<br />}<br />module_init(mydrv_init);<br />module_exit(mydrv_exit);<br />//EXPORT_SYMBOL_GPL(queue_work);<br />MODULE_LICENSE("GPL");

 

編譯執行後發現:

#ps -ef

...

root      5933     2  0 00:59 ?        00:00:00 [Josephdrv]   <------<<<< 這裡這個線程在模組移除後,仍然不退出,不知道什麼原因
root      7572     2  0 01:50 ?        00:00:00 [g_queue]
...

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.