
No comments? Perhaps my original message is too long or too abstract. Let me summarize. For the reasons mentioned in my original post (primarily fixing inconsistencies and unintuitive behavior), I propose changing: 1: explicit scoped_lock(Mutex& mx, bool initially_locked=true) 2: explicit scoped_try_lock(TryMutex& mx) 3: scoped_try_lock(TryMutex& mx, bool initially_locked) 4: scoped_timed_lock(TimedMutex& mx, bool initially_locked) to: 1: explicit scoped_lock(Mutex& mx, lock_state initial_state=LOCK) 2: scoped_try_lock(TryMutex& mx, blocking_mode blocking) 3: scoped_try_lock(TryMutex& mx, lock_state initial_state, blocking_mode blocking) 4: scoped_timed_lock(TimedMutex& mx, lock_state initial_state) where lock_state is defined something like this: namespace lock_state { typedef enum { unlocked=0, locked=1 } lock_state; } and blocking_mode is defined something like this: namespace blocking_mode { typedef enum { non_blocking=0, blocking=1 } blocking_mode; } Mike