Professional Documents
Culture Documents
Ricart Agrawala Mutual Exclusion
Ricart Agrawala Mutual Exclusion
import time
import random
class Node:
def __init__(self, node_id, num_nodes):
self.node_id = node_id
self.num_nodes = num_nodes
self.reply_count = 0
self.request_queue = []
self.cs_lock = threading.Lock()
def request_critical_section(self):
# Send request to all other nodes
for node in nodes:
if node != self:
node.receive_request(self.node_id)
def receive_reply(self):
self.reply_count += 1
def node_thread(node):
while True:
time.sleep(random.uniform(1, 5)) # Simulate non-critical section work
node.request_critical_section()
# Example usage
num_nodes = 3
nodes = [Node(i, num_nodes) for i in range(num_nodes)]
# Create and start threads for each node
threads = []
for node in nodes:
thread = threading.Thread(target=node_thread, args=(node,))
thread.start()
threads.append(thread)