[thread.lock.scoped] (original) (raw)

32 Concurrency support library [thread]

32.6 Mutual exclusion [thread.mutex]

32.6.5 Locks [thread.lock]

32.6.5.3 Class template scoped_lock [thread.lock.scoped]

namespace std { template<class... MutexTypes> class scoped_lock { public: using mutex_type = see below; explicit scoped_lock(MutexTypes&... m);explicit scoped_lock(adopt_lock_t, MutexTypes&... m);~scoped_lock(); scoped_lock(const scoped_lock&) = delete; scoped_lock& operator=(const scoped_lock&) = delete;private: tuple<MutexTypes&...> pm; };}

An object of type scoped_lock controls the ownership of lockable objects within a scope.

A scoped_lock object maintains ownership of lockable objects throughout the scoped_lock object's lifetime.

The behavior of a program is undefined if the lockable objects referenced bypm do not exist for the entire lifetime of the scoped_lockobject.

explicit scoped_lock(MutexTypes&... m);

Effects: Initializes pm with tie(m...).

Then if sizeof...(MutexTypes) is 0, no effects.

Otherwise if sizeof...(MutexTypes) is 1, then m.lock().

Otherwise, lock(m...).

explicit scoped_lock(adopt_lock_t, MutexTypes&... m);

Preconditions: The calling thread holds a non-shared lock on each element of m.

Effects: Initializes pm with tie(m...).

Effects: For all i in [0, sizeof...(MutexTypes)),get<i>(pm).unlock().