xxxxxxxxxx
// Process initialization
state: int = RELEASED
requested: bool = false
replies: int = 0
pending_requests: set = {}
// Function for requesting the critical section
requestCriticalSection():
state = WANTED
replies = 0
pending_requests = {}
// Send request messages to all other processes
for each process in processes:
if process != self:
sendRequest(process)
// Wait until all replies are received
while replies < (total_processes - 1):
wait()
// Entering critical section
state = HELD
// Function for releasing the critical section
releaseCriticalSection():
state = RELEASED
// Send deferred requests
for each process in pending_requests:
sendReply(process)
// Clear pending requests
pending_requests = {}
// Function for handling request messages
receiveRequest(process):
if state == HELD or (state == WANTED and process < self):
// Defer the request and send a reply later
pending_requests.add(process)
else:
// Send an immediate reply
sendReply(process)
// Function for handling reply messages
receiveReply(process):
if state == WANTED:
// Count the replies
replies = replies + 1
// Function for sending request messages
sendRequest(process):
send(request, process)
// Function for sending reply messages
sendReply(process):
send(reply, process)