Pular para o conteúdo

Concorrência

Threads, atores, canais, travas, STM e processos — e a regra que decide qual: quem pode escrever neste estado?

A linguagem não sincroniza sozinha. Duas threads escrevendo na mesma variável perdem atualizações — medido: 40.425 de 80.000, calado. Toda ferramenta desta seção responde de um jeito à mesma pergunta: quem pode escrever neste estado, e quando?

dataforge
adopt Arcane.Concurrent as P

// um ator: o estado mora numa thread, e as outras só enviam
contador := P.ator(lambda n, m: n + m, 0)
action somar_muito():
    cycle i from 1 to 500:
        contador.enviar(1)
parallel:
    somar_muito()
    somar_muito()
assert contador.parar() is 1000          // nenhuma atualização perdida
RespostaFerramentaPágina
ninguém: cada um tem o seuvariável por threadUma por thread
só um dono, por mensagematorAtores
passa de mão em mãocanalCanais
qualquer um, um de cada vezmutex, semáforoTravas
qualquer um, junto ou nadaSTMMemória transacional
ninguém compartilha memóriaprocessosProcessos