new linux device driver - work queue - 2

續前篇 -work queue

github example

和前篇不同的是, 這次我們直接建立一個 work queue, 而不是呼叫 schedule_work()
schedule_work() 是 掛到 Linux 系統提供的 work queue - keventd_wq

struct workqueue_struct *wq;


1. work queue 建立, 有底下兩種方式
   (1) create_workqueue()
        在每個 CPU 都會 建立一個 thread, 來提取 work queue 中的任務執行
   (2) create_singlethread_workqueue()
        如果確定只要 一個 single thread, 就可以用這個 function

wq = create_singlethread_workqueue("my_single_thread");


2. queue_work
    將 work 放到 work queue 中
queue_work(wq, &my_data->my_work);


3. 清除

flush_workqueue(wq);
用 cancel_delayed_work 將相關的 work 從 queue 中 清除

destroy_workqueue(wq);
刪除 work queue

留言

熱門文章