|
6202 | 6202 | The ``inter-thread happens before'' relation describes arbitrary |
6203 | 6203 | concatenations of ``sequenced before'', ``synchronizes with'' and |
6204 | 6204 | ``dependency-ordered before'' relationships, with two exceptions. The first |
6205 | | -exception is that a concatenation is not permitted to end with |
| 6205 | +exception is that a concatenation never ends with |
6206 | 6206 | ``dependency-ordered before'' followed by ``sequenced before''. The reason for |
6207 | 6207 | this limitation is that a consume operation participating in a |
6208 | 6208 | ``dependency-ordered before'' relationship provides ordering only with respect |
6209 | 6209 | to operations to which this consume operation actually carries a dependency. The |
6210 | 6210 | reason that this limitation applies only to the end of such a concatenation is |
6211 | 6211 | that any subsequent release operation will provide the required ordering for a |
6212 | | -prior consume operation. The second exception is that a concatenation is not |
6213 | | -permitted to consist entirely of ``sequenced before''. The reasons for this |
| 6212 | +prior consume operation. The second exception is that a concatenation never |
| 6213 | +consist entirely of ``sequenced before''. The reasons for this |
6214 | 6214 | limitation are (1) to permit ``inter-thread happens before'' to be transitively |
6215 | 6215 | closed and (2) the ``happens before'' relation, defined below, provides for |
6216 | 6216 | relationships consisting entirely of ``sequenced before''. |
|
6290 | 6290 | \begin{note} |
6291 | 6291 | This states that operations on |
6292 | 6292 | ordinary objects are not visibly reordered. This is not actually detectable |
6293 | | -without data races, but it is necessary to ensure that data races, as defined |
| 6293 | +without data races, but is needed to ensure that data races, as defined |
6294 | 6294 | below, and with suitable restrictions on the use of atomics, correspond to data |
6295 | 6295 | races in a simple interleaved (sequentially consistent) execution. |
6296 | 6296 | \end{note} |
|
6401 | 6401 | However, this applies only to data-race-free programs, and data-race-free |
6402 | 6402 | programs cannot observe most program transformations that do not change |
6403 | 6403 | single-threaded program semantics. In fact, most single-threaded program |
6404 | | -transformations continue to be allowed, since any program that behaves |
| 6404 | +transformations remain possible, since any program that behaves |
6405 | 6405 | differently as a result has undefined behavior. |
6406 | 6406 | \end{note} |
6407 | 6407 |
|
|
6538 | 6538 | the implementation ensures that the thread will eventually make progress for as |
6539 | 6539 | long as it has not terminated. |
6540 | 6540 | \begin{note} |
6541 | | -This is regardless of whether or not other threads of execution (if any) |
| 6541 | +This applies regardless of whether or not other threads of execution (if any) |
6542 | 6542 | have been or are making progress. To eventually fulfill this requirement means that |
6543 | 6543 | this will happen in an unspecified but finite amount of time. |
6544 | 6544 | \end{note} |
|
0 commit comments