| ア | イ | ウ | エ | オ |
| カ | キ | ク | ケ | コ |
| サ | シ | ス | セ | ソ |
| タ | チ | ツ | テ | ト |
| ナ | ニ | ヌ | ネ | ノ |
| ハ | ヒ | フ | ヘ | ホ |
| マ | ミ | ム | メ | モ |
| ヤ | ユ | ヨ | ||
| ラ | リ | ル | レ | ロ |
| ワ | ヰ | ヴ | ヱ | ヲ |
| ン |
| A | B | C | D | E |
| F | G | H | I | J |
| K | L | M | N | O |
| P | Q | R | S | T |
| U | V | W | X | Y |
| Z | 数字 | 記号 | ||
workqueueはtaskletの問題を改善するもので、専用のカーネルスレッドを作って実行する。また、指定した時間経過後に処理を呼び出すことが可能である。
予め用意されているシステム共有のカーネルスレッドとキューを用いても良いし、create_workqueue()関数で独自のカーネルスレッドとキューを作成し使用することもできる。
ワークキュー内でsleepした場合などは、その影響はそのワークキューが持つ全てのワークに及ぶ。
workqueueでは、遅延処理をオブジェクト(work_struct)として管理する。
必要な遅延処理ごとにwork_structを用意し、これをキューに格納して順次実行することになる。
workqueueはカーネルスレッドを作って処理するため、他のカーネルスレッドへの影響がない。
独自に作る方法と、システム共有のものを使う方法とがある。
なお、このカーネルスレッドは、キューに遅延処理がプッシュされてくるまではスリープしている。
次のような関数が用意されている。
すぐに実行するのではなく、暫く経ってから実行することも可能。これら関数にはdelayedと付けられている。
よう使うもの。
ここでは簡潔に済ませるために、システム共有のworkqueueを使う。
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 */
}
コメントなどを投稿するフォームは、日本語対応時のみ表示されます