Mutex Flavors

Connoisseurs distinguish various attributes of mutexes. It helps to know some of these, because they involve trade-offs between generality and efficiency. Picking the right one often helps performance. Mutexes can be described by the following qualities, also summarized in Table 7-1.

Table 7-1. Traits and behavior of mutexes

Mutex

Scalable

Fair

Reentrant

Sleeps

Size

mutex

OS-dependent

OS-dependent

No

Yes

Three or more words

spin_mutex

No

No

No

No

One byte

queuing_mutex

Yes

Yes

No

No

One word

spin_rw_mutex

No

No

No

No

One word

queuing_rw_mutex

Yes

Yes

No

No

One word

Scalable

Some mutexes are called scalable. In a strict sense, this is not an accurate name because a mutex limits execution to one task at a time and is therefore necessarily a drag on scalability. A scalable mutex is rather one that does no worse than forcing single-threaded performance. A mutex actually can do worse than serialize execution if the waiting tasks consume excessive processor cycles and memory bandwidth, reducing the speed of tasks trying to do real work. Scalable mutexes are often slower than nonscalable mutexes under light contention, so a nonscalable mutex may be better. When in doubt, use a scalable mutex.

Fair

Mutexes can be fair or unfair. A fair mutex lets tasks through in the order they arrive. Fair mutexes avoid starving tasks. Each task gets its turn. However, unfair mutexes can be faster because they let tasks that are running go through ...

Get Intel Threading Building Blocks now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.