tmp/tmpx7h63ym0/{from.md → to.md}
RENAMED
|
@@ -7,11 +7,11 @@ a (possibly void) value or an exception. Futures, promises, and tasks
|
|
| 7 |
defined in this clause reference such shared state.
|
| 8 |
|
| 9 |
The result can be any kind of object including a function to compute
|
| 10 |
that result, as used by `async` when `policy` is `launch::deferred`.
|
| 11 |
|
| 12 |
-
An *asynchronous return object* is an object that reads results from
|
| 13 |
shared state. A *waiting function* of an asynchronous return object is
|
| 14 |
one that potentially blocks to wait for the shared state to be made
|
| 15 |
ready. If a waiting function can return before the state is made ready
|
| 16 |
because of a timeout ([[thread.req.lockable]]), then it is a *timed
|
| 17 |
waiting function*, otherwise it is a *non-timed waiting function*.
|
|
@@ -27,11 +27,15 @@ When an asynchronous return object or an asynchronous provider is said
|
|
| 27 |
to release its shared state, it means:
|
| 28 |
|
| 29 |
- if the return object or provider holds the last reference to its
|
| 30 |
shared state, the shared state is destroyed; and
|
| 31 |
- the return object or provider gives up its reference to its shared
|
| 32 |
-
state
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
|
| 34 |
When an asynchronous provider is said to make its shared state ready, it
|
| 35 |
means:
|
| 36 |
|
| 37 |
- first, the provider marks its shared state as ready; and
|
|
|
|
| 7 |
defined in this clause reference such shared state.
|
| 8 |
|
| 9 |
The result can be any kind of object including a function to compute
|
| 10 |
that result, as used by `async` when `policy` is `launch::deferred`.
|
| 11 |
|
| 12 |
+
An *asynchronous return object* is an object that reads results from a
|
| 13 |
shared state. A *waiting function* of an asynchronous return object is
|
| 14 |
one that potentially blocks to wait for the shared state to be made
|
| 15 |
ready. If a waiting function can return before the state is made ready
|
| 16 |
because of a timeout ([[thread.req.lockable]]), then it is a *timed
|
| 17 |
waiting function*, otherwise it is a *non-timed waiting function*.
|
|
|
|
| 27 |
to release its shared state, it means:
|
| 28 |
|
| 29 |
- if the return object or provider holds the last reference to its
|
| 30 |
shared state, the shared state is destroyed; and
|
| 31 |
- the return object or provider gives up its reference to its shared
|
| 32 |
+
state; and
|
| 33 |
+
- these actions will not block for the shared state to become ready,
|
| 34 |
+
except that it may block if all of the following are true: the shared
|
| 35 |
+
state was created by a call to `std::async`, the shared state is not
|
| 36 |
+
yet ready, and this was the last reference to the shared state.
|
| 37 |
|
| 38 |
When an asynchronous provider is said to make its shared state ready, it
|
| 39 |
means:
|
| 40 |
|
| 41 |
- first, the provider marks its shared state as ready; and
|