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
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
留言
張貼留言