ExpertiDict

Go · Avançado · Português · Técnico

modelo de memória

/moˈde.lu d͡ʒi meˈmɔ.ɾja/substantivo

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

Veja também

Todos os termos de Go