私は、並行性と競合状態に関する章「Linuxデバイスドライバ第3版」を読んでいます。私が完全に理解していない例があります。彼らは現在のスレッドの外で(例えば、新しいカーネルスレッドやユーザプロセス、既存のプロセスの要求、またはハードウェアベースのアクションのための)活動を開始する必要があるときに、カーネルプログラミングの共通パターンについて話しています。コンプリート。非常に効果的ではない解決策の例は次のとおりです。Linuxカーネルミューテックス
struct semaphore sem;
init_MUTEX_LOCKED(&sem);
start_external_task(&sem);
down(&sem);
その後、彼らはその作業が行われたときに外部タスクが(& SEM)を呼び出すことをお勧めします。
我々はこのようにそれを行うことができない理由を私は理解していない:
struct semaphore sem;
down(&sem);
start_external_task(&sem);
ロック状態でミューテックスを作成し、タスクが開始された後に、ミューテックスを取得する必要があるのはなぜ?
あなたからのご意見をお待ちしております。ありがとう。
+1ですが、私はmutexの代わりに 'semaphore'という言葉を使うのが良いと思います。 SEMAPHORE:どのスレッドでも上/下が可能です。 MUTEX:所有権を持ちます。ロック所有者スレッドのみがmutexを上げることができます。この場合、セマフォを使用する必要があります。スレッド間の通信が目的です。 – Vojta
@Vojita:私は同意します。私はミューテックスという用語を使用しました。なぜなら、その質問はセマフォをミューテックスと呼んでいるからです。 –