Meu entendimento da memória transacional, conforme descrito abaixo, está correto?
Estou tentando entender a MT. Li a resposta de Ben aqui e tentei entender alguns outros artigos na Internet. Ainda não tenho certeza se entendi bem. No meu entendimento, na memória transacional, os threads podem executar as transações em paralelo. Se duas (ou mais) threads tentarem acessar a mesma variável de transação, todas as threads, exceto uma, irão abortar a transação e reiniciar (em algum ponto, não necessariamente imediatamente). Aquele que não aborta atualiza a variável de transação.
Portanto, em poucas palavras, no TM, todos os threads são executados em paralelo e esperamos que não haja sobreposições de acesso às variáveis transacionais e, se houver, apenas deixamos um thread continuar, enquanto os outros retrocedem e tentam novamente. Este entendimento da MT está correto?
Respostas
Essa é uma sinopse muito boa. Os detalhes são bastante complicados e é possível que algumas transações não possam ser expressas em um determinado monitor de TM; o que significa que você pode ter que incluir duas implementações de sua transação - uma otimista e uma pessimista.
O cache é a implementação subjacente; quando você faz uma referência transacional à memória, o cache observa isso e gera um alarme (reinicialização) quando qualquer uma dessas referências é modificada, ou rejeita o fechamento da transação se alguma tiver sido modificada.
O número de variáveis transacionais pode ter que, em geral, ser menor do que a associatividade do seu cache; caso contrário, eles se despejariam do cache, resultando em uma transação que nunca poderia ser concluída.
Como as interrupções funcionam no meio de uma transação permanece um problema em aberto.
Resumindo, era uma ideia fascinante há 20 anos. À medida que se aproxima da usabilidade geral, parece ter requisitos de hardware em rápida expansão. Pode ser mais útil para aquecer climas frios do que acelerar sistemas de computador.