O problema com esses três processos seria que eles poderiam prejudicar os dados uns dos outros. Seu buffer de anel tem uma variável de índice de leitura, uma variável de índice de gravação e, digamos, 10 locais.
Digamos que a variável de índice aponte para o local # 4.
Digamos que o processo 1 queira adicionar ao buffer. Assim, o processo um recupera a variável de índice de gravação, grava seus dados no local 4 e incrementa o índice de gravação, portanto, é agora o número 5. Até agora, tudo funciona lindamente.
Agora os processos 2 e 3 desejam adicionar ao buffer. Processo 2 recupera o índice de gravação e vê # 5. O processo 3 recupera o índice de gravação e também vê o nº 5. Então o processo 2 grava seus dados no local 5, mas isso é imediatamente destruído pelo processo 3 (que viu a mesma localização depois de tudo!) Finalmente, o processo 2 e 3 ambos incrementam o índice de gravação. Dependendo do momento e da sua implementação exata, o índice de gravação pode acabar sendo 6 ou 7.
Uma solução para este problema é tornar toda a operação atômica - o que significa que o processo 3 não consegue fazer nada no buffer de anel até que o processo 2 tenha terminado. Isso é o que uma fechadura faz.