2012-03-01 17 views
1

workqueue.cを見ると、公開されているAPIと実行中の内部スレッドの間に適切にロックされている部分だけがあるように見えます。クリティカルセクション(私の訓練されていない目には)が安全でない可能性のあるものがいくつかあるようです。work_queueスレッドは安全ですか?

私は正しいですか?

+1

少し具体的に教えてください。 – pmdj

+1

カーネルに重要なセクションはありません。セマフォ、スピンロック、両方のリーダライタの変形、補完、irqsave、アトミック操作、メモリバリア、慎重な順序付け、およびCPU単位のデータ構造だけがあります。それぞれは、それが解決できるケースのセットを正確に定義し、使用できるコンテキストのセットを正確に定義しています。したがって、すべてをロックするために1つのことを使用することすらできません。 –

答えて

2

あなたはLinuxカーネルのworkqueue.cについて話していると思いますか? http://lxr.linux.no/#linux+v3.2.9/kernel/workqueue.c

この場合、パブリックAPIのみを使用し、スレッドセーフであり、表示されている問題をIngo Molnarに報告します。大部分のカーネル開発者は真剣に賢明であり、「大きなロック」のミスをやり直すことはないことに注意してください。すべてがミューテックスの下で実行されるわけではないためです。 RCU(読み取りコピー更新)のようなトリックも、必要なロックの量を減らします。 ロックを持たないものはすべてより良いパフォーマンスを発揮します。

関連する問題