Go · Avançado · Português · Técnico
modelo de memória
Especificação que define quando uma escrita em uma goroutine é garantidamente visível em outra. A relação happens-before é criada por channels, mutexes, sync.Once e operações atômicas.
Onde usar
Explica por que ler uma variável sem sincronização pode devolver valor antigo ou outro estranho. Em review, toda variável compartilhada deve ter um mecanismo de sincronização claro.
Em código
var dado string
var pronto = make(chan struct{})
func escreve() {
dado = "olá"
close(pronto) // happens-before o receive
}
// outra goroutine: <-pronto; use(dado)Exemplos
Pelo modelo de memória, o close acontece antes do receive que ele libera.
Sem sincronização, o modelo de memória não garante que a outra goroutine veja a escrita.
Cuidado
Não confunda com o modelo de alocação (pilha e heap); o modelo de memória trata de visibilidade entre goroutines.
Sinônimos
happens-before