В п. 1.10.11 ИСО / МЭК 14882: 2011 (C ++ 11) определено отношение «между потоками происходит раньше» между оценками, единственное отличие которого от отношения «случается раньше» в п. 1.10.12 состоит в том, что A происходит перед B, если Последовательность A перед B, но этого недостаточно для того, чтобы A-поток происходил до B. Почему «inter-thread-before» достаточно важен для отдельного определения?
В примечании к § 1.10.11 предполагается, что «inter-thread случается раньше» не допускает вычислений, единственное отношение которых «sequenced before» частично
разрешить транзитивно закрывать «поток между событиями раньше»
Что это значит? Я знаю, что такое транзитивное закрытие, и я знаю, что означает закрытие набора для какой-либо операции, но я никогда не слышал о «транзитивно закрытом», и Google и контекст меня подводят.
«Интерпоток происходит раньше» определяется исключительно для экспозиции. Обратите внимание, что «случается раньше» определяется как «последовательность перед тем, или между потоками происходит раньше», а понятие «между потоками происходит раньше» не используется ни для чего другого. «Последовательность перед» описывает оценки, происходящие в одном и том же потоке, «межпотоковый процесс происходит раньше» применяется к оценкам, происходящим в разных потоках; «случается раньше» объединяет два.
«Транзитивно замкнутое» замечание просто означает, что отношение транзитивно: если межпотоковый A происходит раньше, чем межпотоковый B, а перед C — до C, то межпотоковый A — до C.
Это свойство не сохраняется, если «секвенировано до» само по себе квалифицируется как «происходит раньше между потоками» из-за первого исключения (последовательности, оканчивающиеся на «упорядоченный по зависимости раньше», за которым следует «секвенированные до»).
Это также означает, что «случается раньше» не является переходным; если A происходит до B, а B происходит до C, это не обязательно означает, что A происходит до C.