Introducing exclusion locks
Hardware-specific atomic instructions can operate only on CPU word- and doubleword-size data; they cannot be directly applied on shared data structures of custom size. For most multi-threaded scenarios, often it can be observed that shared data is of custom sizes, for example, a structure with n elements of various types. Concurrent code paths accessing such data usually comprise a bunch of instructions that are programmed to access and manipulate shared data; such access operations must be executed atomically to prevent races. To ensure atomicity of such code blocks, mutual exclusion locks are used. All multi-threading environments provide implementation of exclusion locks that are based on exclusion protocols. These locking implementations are built on top of hardware-specific atomic instructions.
The Linux kernel implements operation interfaces for standard exclusion mechanisms such as mutual and reader-writer exclusions. It also contains support for various...