cpp/thread/shared lock/shared lock

Constructs a, optionally locking the supplied mutex.

@1@ Constructs a with no associated mutex. @2@ Move constructor. Initializes the with the contents of. Leaves with no associated mutex. @3-8@ Constructs a with  as the associated mutex. Additionally:
 * @3@ Locks the associated mutex in shared mode by calling.
 * @4@ Does not lock the associated mutex.
 * @5@ Tries to lock the associated mutex in shared mode without blocking by calling.
 * @6@ Assumes the calling thread already holds a shared lock (i.e., a lock acquired by, , , or ) on . The behavior is undefined if not so.

@7@ Tries to lock the associated mutex in shared mode by calling, which blocks until specified has elapsed or the lock is acquired, whichever comes first. May block for longer than. The behavior is undefined if does not meet the  requirements. @8@ Tries to lock the associated mutex in shared mode by calling, which blocks until specified has been reached or the lock is acquired, whichever comes first. May block for longer than until has been reached. The behavior is undefined if does not meet the  requirements.