Um programa corretamente sincronizado ainda permite a corrida de dados? (Parte I)
Existem duas conclusões do JLS:
C1: Se um programa estiver livre de corridas de dados, todas as execuções do programa parecerão consistentes em seqüência:data-race-free => sequentially consistent
C2: Se um programa for sincronizado corretamente, todas as execuções do programa parecerão consistentes em seqüência:correctly synchronized => sequentially consistent
Se o inverso de C1 for verdadeiro, então podemos concluir que:
C3: Se um programa está sincronizado corretamente, então ele está livre de raças de dados:correctly synchronized => data-race-free
Mas, infelizmente, não há tal declaração no JLS, então chego à quarta conclusão:
C4: Um programa pode ser sincronizado corretamente e ter corridas de dados.Mas não estou satisfeito com essa abordagem e quero obter uma prova de que essa conclusão é verdadeira (ou falsa), mesmo de maneira informal ou por amostragem.
Primeiro de tudo, eu acho que um segmento de código que mostra uma execução sequencialmente consistente de um programa multi-threaded que contém uma corrida de dados é útil para entender e resolver esse problema.
Após séria consideração, ainda não consigo encontrar uma amostra adequada. Então você poderia me dar um segmento de código?