Problemas Clássicos
Há um punhado de problemas que aparecem em todo livro de concorrência, e não por tradição. Cada um isola uma dificuldade específica de coordenar threads, com um enredo simples o bastante pra caber numa frase e geral o bastante pra reaparecer, disfarçado, em código de verdade. Quem resolve o produtor-consumidor sabe conectar qualquer fila entre um lado que gera trabalho e outro que consome. Quem resolve os filósofos jantando sabe evitar deadlock quando várias threads disputam vários recursos.
Os quatro deste capítulo vêm da época em que a caixa de ferramentas era o semáforo, antes das primitivas mais confortáveis que veremos adiante, e é com semáforo e mutex que vamos resolver todos eles. Isso não é limitação: é justamente o que torna os problemas instrutivos, porque força a construir a coordenação na mão, vendo cada peça no lugar. As soluções que você vai escrever aqui são as mesmas que Dijkstra e seus contemporâneos escreveram, e várias delas são o que roda por baixo das abstrações prontas de hoje.