Strategized Locking is another pattern I was very familiar with through working with the third libraries like ACE, POCO an so on. The Strategized Locking design pattern parameterizes synchronization mechanisms that protect a component's critical sections from concurrent access.
Parameterize a component's synchronization aspects by making them 'pluggable' types. Each type objectifies a particular synchronization strategy, such as a mutex, reader/writer lock, semaphore, or 'null' lock. Define instances of these pluggable types as objects contained within a component that can use the objects to synchronize its method implementations efficiently.