Funnel (concurrent computing) とは

コンピュータサイエンスでは、ファンネルは、システムリソースを保護するためにカーネル開発で使用される同期プリミティブです。最初にDigital UNIXでデバイスドライバの実行を1つのプロセッサに振り向ける方法として、funnelsがMac OS XカーネルでxnuのBSD部分へのアクセスをシリアライズするために使用されています。
ファンネルは、複数のスレッドが同時に特定のカーネルリソースにアクセスするのを防ぐ、相互排他(mutex)メカニズムです。各スレッドは、カーネルの同期部分に入るとファンネルを取得し、それが離れるときにそれを解放します。スレッドが漏斗を保持している間にスレッドをブロック(スリープ)すると、カーネルはスレッドに自動的に漏斗を落とさせ、それによって他のスレッドがカーネルの同期部分に入ることを可能にします。
スレッドがブロックされると、漏斗が自動的に削除されるため、ブロックされた操作の後で同期されたリソースが再度取得されるように注意する必要があります。具体的には、ファンネルを取得することはブロック操作になる可能性があるため、複数のファンネルが必要な場合は一度に取得する必要があります。これにより、複数のファンネルを一度に保持する必要がある場合にロックの細分性が向上するため、ファンネルの利用が制限されます。