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; / Only if sizeof...(MutexTypes) == 1 is true 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; / exposition only }; }
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 by pm do not exist for the entire lifetime of the scoped_lock object.
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);
Throws: Nothing.
~scoped_lock();
Effects: For all i in [0, sizeof.(MutexTypes)), get<i>(pm).unlock().

Follow Lee on X/Twitter - Father, Husband, Serial builder creating AI, crypto, games & web tools. We are friends :) AI Will Come To Life!

Check out: eBank.nz (Art Generator) | Netwrck.com (AI Tools) | Text-Generator.io (AI API) | BitBank.nz (Crypto AI) | ReadingTime (Kids Reading) | RewordGame | BigMultiplayerChess | WebFiddle | How.nz | Helix AI Assistant