A partir do algoritmo de eleição para um anel unidirecional listado abaixo derive um algoritmo de eleição para um anel bidirecional.
when decision (initiate_election) do
participant <- T;
sendL (election, my_number); -- manda para a esquerda
end do ;
when received (election, j) do
case j > my_number then begin
sendL (election, j);
participant <- T;
end case;
case j < my_number and participant then begin
sendL (election, my_number);
participant <- T;
end case;
case j = my_number then sendL (elected,i);
end case ;
when received (elected, j) do
coordinator <- j;
participant <- F;
if j <> my_number then sendL (elected, j);
end if;
end do;
O algoritmo de eleição para um anel bidirecional é baseado na idéia de conduzir uma sequência de eleições em subconjuntos crescentes de processos até todos serem incluídos.
Se Pi inicia uma eleição, ele se declara um candidato e tenta saber se seu identificador (que ele conhece) é maior que o dos seus dois vizinhos (que ele não conhece).
Ele faz isto enviando seu valor a cada um dos vizinhos Pk e Pl.
Estes fazem as comparações necessárias e se k ou l é maior que i, o processo correspondente substitui Pi como candidado; caso contrário Pi se mantém candidato e o teste é feito para os demais processos.
Isto continua até que todos os processos tenham sido consultados.
O papel de um processo derrotado em uma eleição é simplesmente passar qualquer mensagem recebida de um lado para outro, usando
uma primitiva pass .