[thread.req.lockable.general] (original) (raw)

32 Thread support library [thread]

32.2 Requirements [thread.req]

32.2.5 Requirements for Cpp17Lockable types [thread.req.lockable]

32.2.5.1 In general [thread.req.lockable.general]

An execution agent is an entity such as a thread that may perform work in parallel with other execution agents.

[Note 1:

Implementations or users can introduce other kinds of agents such as processes or thread-pool tasks.

— _end note_]

The calling agent is determined by context, e.g., the calling thread that contains the call, and so on.

[Note 2:

Some lockable objects are “agent oblivious” in that they work for any execution agent model because they do not determine or store the agent's ID (e.g., an ordinary spin lock).

— _end note_]

The Cpp17BasicLockable requirements, the Cpp17Lockable requirements, and the Cpp17TimedLockable requirements list the requirements imposed by these library types in order to acquire or release ownership of a lock by a given execution agent.

[Note 3:

The nature of any lock ownership and any synchronization it entails are not part of these requirements.

— _end note_]