O problema se origina quando o produtor quer colocar um novo item no buffer, mas ele já está cheio (significa que o dado ainda não foi lido). Ou seja, o produtor não poderá gravar o dado no buffer, pois caso seja permitida a gravação do novo dado, aquele anteriormente gravado será sobrescrito e nunca mais poderá ser lido pelo consumidor.
De modo análogo, se o consumidor quiser ler um item do buffer e o mesmo estiver vazio, ele não poderá prosseguir, pois corre o risco de ler um “lixo” de memória (valor inválido ou já lido anteriormente).
Veja a seguir o código de exemplo.
Isso significa que ou o dado não existe ainda ou o dado já foi lido.