Proceso P_i:
reloj_local := 0
cola_peticiones := vacía
cola_respuestas := vacía
Algoritmo de Lamport:
Cuando un proceso P_i desea entrar a la sección crítica:
reloj_local := reloj_local + 1
Enviar mensaje de petición a todos los demás procesos:
(reloj_local, i)
Esperar respuestas de los demás procesos
Cuando se recibe un mensaje de petición de P_j:
reloj_local := max(reloj_local, mensaje.reloj_local) + 1
Si P_i no está en la sección crítica o no está esperando a P_j:
Enviar mensaje de respuesta a P_j:
(reloj_local, i)
Cuando se recibe un mensaje de respuesta de P_j:
reloj_local := max(reloj_local, mensaje.reloj_local) + 1
Colocar la respuesta en la cola_respuestas
Al entrar a la sección crítica:
Esperar hasta que se hayan recibido respuestas de todos los demás procesos
Realizar operaciones en la sección crítica
Liberar recursos y enviar mensajes de liberación a todos los demás procesos:
(reloj_local, i)
Limpiar la cola_respuestas
Al recibir un mensaje de liberación de P_j:
reloj_local := max(reloj_local, mensaje.reloj_local) + 1
Colocar el mensaje en la cola_peticiones
Algoritmo de detección de bloqueos centralizado:
Cuando se recibe un mensaje de petición de P_j:
Si P_i no está esperando a P_j:
Colocar la petición en la cola_peticiones
Cuando se recibe un mensaje de liberación de P_j:
Si P_j es el próximo en la cola_peticiones:
Enviar mensaje de respuesta a P_j
Eliminar P_j de la cola_peticiones