The “inter-thread happens before” relation describes arbitrary
concatenations of “sequenced before”, “synchronizes with” and
“dependency-ordered before” relationships, with two exceptions.
exception is that a concatenation is not permitted to end with
“dependency-ordered before” followed by “sequenced before”.
The reason for
this limitation is that a consume operation participating in a
“dependency-ordered before” relationship provides ordering only with respect
to operations to which this consume operation actually carries a dependency.
reason that this limitation applies only to the end of such a concatenation is
that any subsequent release operation will provide the required ordering for a
prior consume operation.
The second exception is that a concatenation is not
permitted to consist entirely of “sequenced before”.
The reasons for this
limitation are (1) to permit “inter-thread happens before” to be transitively
closed and (2) the “happens before” relation, defined below, provides for
relationships consisting entirely of “sequenced before”.
— end note