From Jason Turner

[thread.req.lockable.general]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmptgseqo2q/{from.md → to.md} +15 -9
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. Implementations or users may
5
- introduce other kinds of agents such as processes or thread-pool tasks.
 
 
 
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 work for any
10
- execution agent model because they do not determine or store the agent’s
11
- ID (e.g., an ordinary spin lock).
12
 
13
  The standard library templates `unique_lock` ([[thread.lock.unique]]),
14
- `lock_guard` ([[thread.lock.guard]]), `lock`, `try_lock` (
15
- [[thread.lock.algorithm]]), and `condition_variable_any` (
 
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. The nature of any lock ownership and any
21
- synchronization it may entail are not part of these requirements.
 
 
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