Considere dois processos, produtor e consumidor, compartilhando um mesmo buffer de tamanho fixo N. No processo produtor, produz-se itens de dados e os coloca no buffer. No processo consumidor retira-se o item de dado do buffer. Uma situação de exceção surge quando o consumidor tenta retirar um item do buffer vazio, ou quando o produtor tenta inserir um item no buffer cheio. Um algoritmo para a solução deste problema, utilizando semáforos, é dado pelos procedimentos PRODUTOR e CONSUMIDOR, apresentados a seguir.
PRODUTOR
while TRUE
produzir_item(item)
down(empty)
down(mutex)
insere_no_buffer(item)
up(mutex)
up(full)
CONSUMIDOR
while TRUE
down(full)
down(mutex)
retira_do_buffer(item)
up(mutex)
up(empty)
consome_item(item)
Nestes procedimentos, são utilizados três semáforos, mutex, empty e full, responsáveis conjuntamente por viabilizar o bloqueio e a liberação da execução do processo. As funções up e down, respectivamente, incrementam e decrementam os valores dos semáforos.
Sob esta ótica, a opção que corresponde aos valores de inicialização dos semáforos é