tmp/tmptgseqo2q/{from.md → to.md}
RENAMED
|
@@ -1,22 +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 |
The calling agent is determined by context, e.g. the calling thread that
|
| 7 |
contains the call, and so on.
|
| 8 |
|
| 9 |
-
Some lockable objects are “agent oblivious” in that they
|
| 10 |
-
execution agent model because they do not determine or
|
| 11 |
-
ID (e.g., an ordinary spin lock).
|
| 12 |
|
| 13 |
The standard library templates `unique_lock` ([[thread.lock.unique]]),
|
| 14 |
-
`
|
| 15 |
-
[[thread.lock.
|
|
|
|
| 16 |
[[thread.condition.condvarany]]) all operate on user-supplied lockable
|
| 17 |
objects. The `BasicLockable` requirements, the `Lockable` requirements,
|
| 18 |
and the `TimedLockable` requirements list the requirements imposed by
|
| 19 |
these library types in order to acquire or release ownership of a `lock`
|
| 20 |
-
by a given execution agent.
|
| 21 |
-
|
|
|
|
|
|
|
| 22 |
|
|
|
|
| 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 may 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 that
|
| 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` ([[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 `BasicLockable` requirements, the `Lockable` requirements,
|
| 22 |
and the `TimedLockable` requirements list the requirements imposed by
|
| 23 |
these library types in order to acquire or release ownership of a `lock`
|
| 24 |
+
by a given execution agent.
|
| 25 |
+
|
| 26 |
+
[*Note 3*: The nature of any lock ownership and any synchronization it
|
| 27 |
+
may entail are not part of these requirements. — *end note*]
|
| 28 |
|