Funnel (concurrent computing)

In Computer science, a funnel is a synchronization primitive used in kernel development to protect system resources. First used on Digital UNIX as a way to "funnel" device driver execution onto a single processor, funnels are now used in the Mac OS X kernel to serialize access to the BSD portion of XNU. [1]

A funnel is a mutual exclusion (mutex) mechanism that prevents more than one thread from accessing certain kernel resources at the same time. Each thread acquires a funnel when it enters a synchronized portion of the kernel, and releases it when it leaves. If a thread blocks (sleeps) while holding a funnel, the kernel forces the thread to automatically drop the funnel, thereby allowing other threads to enter the synchronized portion of the kernel.

Because a funnel is automatically dropped when a thread blocks, care must be taken to ensure that synchronized resources are acquired again after any blocking operation. Specifically, acquiring a funnel can be a blocking operation, so if multiple funnels are needed, they must be acquired at once. This limits the utility of funnels because it increases the granularity of locking when multiple funnels need to be held at once.

  1. ^ Singh 07, pp. 1223-1229