Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/named req/BasicLockable"

From cppreference.com
< cpp‎ | named req
(P2160R1/LWG2363)
(Explicitly specifiy non-shared lock.)
Line 21: Line 21:
 
|}
 
|}
  
===Notes===
+
====Non-shared locks====
The {{tt|lock}} member function obtains a non-shared lock on {{tt|m}} on succcess.
+
A lock on an object is said to be ''non-shared lock'' if it is acquired by a call to {{tt|lock}}, {{tt|try_lock}}, {{tt|try_lock_for}}, or {{tt|try_lock_until}} member function.
  
 
===See also===
 
===See also===

Revision as of 17:41, 18 October 2021

 
 
C++ named requirements
 

The BasicLockable requirements describe the minimal characteristics of types that provide exclusive blocking semantics for execution agents (i.e. threads).

Requirements

For type L to be BasicLockable, the following conditions have to be satisfied for an object m of type L:

Expression Preconditions Effects
m.lock() Blocks until a lock can be obtained for the current execution agent (thread, process, task). If an exception is thrown, no lock is obtained.
m.unlock() The current execution agent holds a non-shared lock on m. Releases the non-shard lock held by the execution agent.

Throws no exceptions.

Non-shared locks

A lock on an object is said to be non-shared lock if it is acquired by a call to lock, try_lock, try_lock_for, or try_lock_until member function.

See also