tmp/tmplu2267mk/{from.md → to.md}
RENAMED
|
@@ -1,28 +1,28 @@
|
|
| 1 |
#### In general <a id="thread.req.lockable.general">[[thread.req.lockable.general]]</a>
|
| 2 |
|
| 3 |
An *execution agent* is an entity such as a thread that may perform work
|
| 4 |
in parallel with other execution agents.
|
| 5 |
|
| 6 |
-
[*Note 1*: Implementations or users
|
| 7 |
such as processes or thread-pool tasks. — *end note*]
|
| 8 |
|
| 9 |
-
The calling agent is determined by context, e.g. the calling thread
|
| 10 |
-
contains the call, and so on.
|
| 11 |
|
| 12 |
[*Note 2*: Some lockable objects are “agent oblivious” in that they
|
| 13 |
work for any execution agent model because they do not determine or
|
| 14 |
store the agent’s ID (e.g., an ordinary spin lock). — *end note*]
|
| 15 |
|
| 16 |
-
The standard library templates `unique_lock`
|
| 17 |
-
`shared_lock`
|
| 18 |
-
[[thread.lock.scoped]]
|
| 19 |
-
`try_lock`
|
| 20 |
-
[[thread.condition.condvarany]]
|
| 21 |
-
objects. The
|
| 22 |
-
and the
|
| 23 |
-
these library types in order to acquire or
|
| 24 |
-
by a given execution agent.
|
| 25 |
|
| 26 |
[*Note 3*: The nature of any lock ownership and any synchronization it
|
| 27 |
-
|
| 28 |
|
|
|
|
| 1 |
#### In general <a id="thread.req.lockable.general">[[thread.req.lockable.general]]</a>
|
| 2 |
|
| 3 |
An *execution agent* is an entity such as a thread that may perform work
|
| 4 |
in parallel with other execution agents.
|
| 5 |
|
| 6 |
+
[*Note 1*: Implementations or users can introduce other kinds of agents
|
| 7 |
such as processes or thread-pool tasks. — *end note*]
|
| 8 |
|
| 9 |
+
The calling agent is determined by context, e.g., the calling thread
|
| 10 |
+
that contains the call, and so on.
|
| 11 |
|
| 12 |
[*Note 2*: Some lockable objects are “agent oblivious” in that they
|
| 13 |
work for any execution agent model because they do not determine or
|
| 14 |
store the agent’s ID (e.g., an ordinary spin lock). — *end note*]
|
| 15 |
|
| 16 |
+
The standard library templates `unique_lock` [[thread.lock.unique]],
|
| 17 |
+
`shared_lock` [[thread.lock.shared]], `scoped_lock`
|
| 18 |
+
[[thread.lock.scoped]], `lock_guard` [[thread.lock.guard]], `lock`,
|
| 19 |
+
`try_lock` [[thread.lock.algorithm]], and `condition_variable_any`
|
| 20 |
+
[[thread.condition.condvarany]] all operate on user-supplied lockable
|
| 21 |
+
objects. The *Cpp17BasicLockable* requirements, the *Cpp17Lockable*
|
| 22 |
+
requirements, and the *Cpp17TimedLockable* requirements list the
|
| 23 |
+
requirements imposed by these library types in order to acquire or
|
| 24 |
+
release ownership of a `lock` by a given execution agent.
|
| 25 |
|
| 26 |
[*Note 3*: The nature of any lock ownership and any synchronization it
|
| 27 |
+
entails are not part of these requirements. — *end note*]
|
| 28 |
|