In systems with more than one thread of execution certain resources exist that must not be accessed or modified at the same time. These resources could be peripheral devices or memory buffers and data structures that are accessed by multiple threads or cores.
This type of concurrency control is a general computer science problem. There are many different algorithms that can be used to achieve the necessary mutual exclusion. Many of these algorithms can be implemented entirely in software although more efficient implementations are available if special hardware features are supported. Evaluating the various algorithms is outside the scope of this article which will, instead, focus on the synchronization primitives provided by the ARM architecture.