Mutual exclusion is necessary when at least one thread writes to a shared variable. But it does no harm to permit multiple readers into a protected region. The reader-writer variants of the mutexes, denoted by _rw_ in the class names, enable multiple readers by distinguishing reader locks from writer locks. There can be more than one reader lock on a given mutex.
Requests for a reader lock are distinguished from requests for a writer lock via an extra boolean parameter in the constructor for scoped_lock. The parameter is false to request a reader lock and true to request a writer lock. It defaults to true so that when omitted, a spin_rw_mutex or queuing_rw_mutex behaves like its non-_rw_ counterpart.