Mutual Exclusion
Sabemos criar threads, e sabemos que quando elas compartilham uma variável e a
modificam sem coordenação, incrementos se perdem e o contador soma menos do que
deveria. Vimos isso acontecer: dez threads incrementando counter cem mil vezes
cada, e o resultado final saindo 474032 em vez de 1000000.
Este capítulo é sobre a solução mais fundamental pra esse tipo de problema:
garantir que, do início ao fim daquele counter++, nenhuma outra thread meta a
mão na variável. A ideia se chama exclusão mútua (mutual exclusion), e é a
base de quase todo o restante desta parte do livro.
Vamos começar enunciando o problema com precisão, entender o que “sincronizar” duas threads realmente significa, e então construir a ferramenta que resolve o problema na prática: o lock, e sua encarnação mais comum, o mutex.