Happened-before

Origem: Wikipédia, a enciclopédia livre.

Na ciência da computação, a relação happened-before (denotada: ), também referenciada como happens-before (em português, "acontece antes"), é uma relação entre o resultado de dois eventos, de modo que se um evento acontecer antes de outro evento, o resultado deve refletir isso, mesmo que esses eventos sejam na realidade executados fora de ordem (geralmente para otimizar o fluxo do programa). Isto envolve ordenar eventos com base na relação causal potencial de pares de eventos em um sistema concorrente, especialmente sistemas distribuídos assíncronos . Foi formulado pelo cientista da computação estadunidense Leslie Lamport . [1]

A relação happened-before é formalmente definida como a menos estrita ordem parcial em eventos tal que:

  • Se os eventos e ocorrem no mesmo processo, se a ocorrência do evento precedeu a ocorrência do evento .
  • Se evento é o envio de uma mensagem e evento é a recepção da mensagem enviada no evento , .

Se dois eventos acontecem em diferentes processos isolados (que não trocam mensagens direta ou indiretamente através de processos de terceiros), então os dois processos são chamados concorrentes, isto é, nem nem são verdade. [2]

Se existirem outras relações causais entre eventos num determinado sistema, como entre a criação de um processo e o seu primeiro evento, estas relações também são adicionadas à definição. Por exemplo, em algumas linguagens de programação como Java, [3] C, C++ ou Rust, pode ser considerada a ocorrência de happened-before se a memória gravada pela instrução A for visível para a instrução B, ou seja, se a instrução A completar sua gravação antes da instrução B inicia sua leitura.

Como todas as ordens parciais estritas, a relação acontecido antes é transitiva, irreflexiva e assimétrica, ou seja:

  • , se e , então (transitividade). Isso significa que para quaisquer três eventos , se aconteceu antes , e aconteceu antes , então deve ter acontecido antes .
  • (irreflexividade). Isso significa que nenhum evento pode acontecer antes de si mesmo.
  • se então (assimetria). Isso significa que para quaisquer dois eventos , se aconteceu antes então não pode ter acontecido antes .

Observemos que a propriedade de assimetria decorre diretamente das propriedades anteriores: por contradição, suponhamos que nós temos e . Então por transitividade temos o que contradiz a irreflexividade.

Os processos que compõem um sistema distribuído não possuem conhecimento da relação happened-before, a menos que utilizem um relógio lógico, como um relógio de Lamport ou um relógio vetorial. Isso permite projetar algoritmos para exclusão mútua e tarefas como depuração ou otimização de sistemas distribuídos e concorrentes.

Veja também[editar | editar código-fonte]

Citações[editar | editar código-fonte]

  1. Lamport, Leslie (1978). "Time, Clocks and the Ordering of Events in a Distributed System", Communications of the ACM, 21(7), 558-565.
  2. «Distributed Systems 3rd edition (2017)». DISTRIBUTED-SYSTEMS.NET (em inglês). Consultado em 20 de março de 2021 
  3. Goetz et al. 2006, pp. 339-342, §16.1.3 The Java Memory Model in 500 words or less.

Referências[editar | editar código-fonte]