Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Acesso Concorrente e Seus Problemas

Você já sabe proteger uma seção crítica: envolve o acesso compartilhado num mutex, ou num bloco synchronized, e a exclusão mútua garante que o contador soma 1000000 toda vez. Mas até agora tratamos os bugs que o lock previne de forma meio informal, chamando tudo de “as threads pisaram umas nas outras”.

Este capítulo dá nomes precisos a esses bugs, e separa conceitos que vivem sendo confundidos, mesmo por programadores experientes. Data race e race condition não são a mesma coisa, apesar de quase todo mundo usar os dois termos como sinônimos. Um pode existir sem o outro, e a diferença muda o jeito de raciocinar sobre o problema e sobre a correção. Por baixo dos dois está a noção de seção crítica, que já usamos na prática e que agora vale definir com cuidado.

Saber usar o mutex é metade do trabalho. A outra metade é reconhecer, no seu próprio código, quais acessos são perigosos e por quê, e é disso que trata este capítulo.