workqueue |
辞書:電算用語の基礎知識 計算機OS機能編 (TCOS) |
読み:ワークキュー |
外語:workqueue |
品詞:名詞 |
|
概要 |
workqueueはtaskletの問題を改善するもので、専用のカーネルスレッドを作って実行する。また、指定した時間経過後に処理を呼び出すことが可能である。
予め用意されているシステム共有のカーネルスレッドとキューを用いても良いし、create_workqueue()関数で独自のカーネルスレッドとキューを作成し使用することもできる。
ワークキュー内でsleepした場合などは、その影響はそのワークキューが持つ全てのワークに及ぶ。
特徴 |
オブジェクト |
workqueueでは、遅延処理をオブジェクト(work_struct)として管理する。
必要な遅延処理ごとにwork_structを用意し、これをキューに格納して順次実行することになる。
カーネルスレッド |
workqueueはカーネルスレッドを作って処理するため、他のカーネルスレッドへの影響がない。
独自に作る方法と、システム共有のものを使う方法とがある。
なお、このカーネルスレッドは、キューに遅延処理がプッシュされてくるまではスリープしている。
独自のworkqueueを使う |
次のような関数が用意されている。
システム共有のworkqueueを使う |
遅延付き |
すぐに実行するのではなく、暫く経ってから実行することも可能。これら関数にはdelayedと付けられている。
よう使うもの。
使用方法 |
ここでは簡潔に済ませるために、システム共有のworkqueueを使う。
schedule_work |
DECLARE_WORKは、struct work_structを作り、初期値を代入するマクロ。
static void test_workqueue_cb(struct work_struct *); static DECLARE_WORK(test_workqueue, test_workqueue_cb);
定義より前に関数があれば良いが、通常はないので、ここではプロトタイプ宣言の例も併せて紹介する。
schedule_work(&test_workqueue);
static void test_workqueue_cb(struct work_struct *work) { /* hogehoge */ }
schedule_delayed_work |
delayed付きも同様だが、時間指定が可能である。
#define DELAY_TIME 2000 /* ms */ schedule_delayed_work(&work, msecs_to_jiffies(DELAY_TIME));
単位がjiffiesなので、ここではミリ秒をjiffiesに変換するinline関数を用いている。
取り消し方法は次の通り。
cancel_delayed_work_sync(&work);
リンク |
通信用語の基礎知識検索システム WDIC Explorer Ver 7.04a (27-May-2022) Search System : Copyright © Mirai corporation Dictionary : Copyright © WDIC Creators club |