Lembrando que a integridade do buffer deve e continuará a ser mantida. Não se pode admitir perdê-la, nunca! Resolver esse problema relacionado à performance sob o aspecto específico do qual estamos tratando, envolve aumentar a quantidade de posições do buffer para, por exemplo, cinco posições.
Obviamente, cada uma das threads (produtor ou consumidor) poderá realizar, no máximo, cinco acessos consecutivos antes de ter que parar/esperar/interromper o seu processamento e aguardar pela outra thread. Deste modo iremos aumentar efetivamente e significativamente o tempo em que cada thread permanece no estado de executável melhorando o turnaround do programa como um todo. A seguir, veja o código e exemplo.