在Java中实现关键部分请求

在Java中实现关键部分请求,java,critical-section,Java,Critical Section,我正在为使用互斥的编程任务创建一个复制文件系统 想法是:3个服务器节点,6个客户端节点。客户端向服务器发送写请求,服务器保存复制文本文件的副本。每个节点都位于虚拟网络中自己的机器上,我将使用Java套接字让它们相互通信 问题:我应该如何处理请求进入关键部分的客户?我使用的是Ricart Agrawala算法,其中一个想要进入分区的客户端请求三个服务器的许可 首先,客户机应该如何准确地为这个请求建模?我应该发出请求对象吗?只是一个布尔数组 其次,服务器节点应该如何处理请求队列,以及如何通过套接字连

我正在为使用互斥的编程任务创建一个复制文件系统

想法是:3个服务器节点,6个客户端节点。客户端向服务器发送写请求,服务器保存复制文本文件的副本。每个节点都位于虚拟网络中自己的机器上,我将使用Java套接字让它们相互通信

问题:我应该如何处理请求进入关键部分的客户?我使用的是Ricart Agrawala算法,其中一个想要进入分区的客户端请求三个服务器的许可

首先,客户机应该如何准确地为这个请求建模?我应该发出请求对象吗?只是一个布尔数组

其次,服务器节点应该如何处理请求队列,以及如何通过套接字连接授予给定的客户端权限?我猜客户端可以在完成后向服务器发送一条“完成”消息,然后服务器收到消息后检查请求队列?这可能只是一个基于发出请求的节点ID的队列。移除队列的头,然后向发出请求的节点发送消息


非常感谢您的帮助。

我认为如果您使用算法选择其中一个节点作为主节点/协调节点,可能会更容易。也许,但我们需要使用Ricart Agrawala算法进行互斥。经过几次优化,但在其他方面完全相同。我第一次听说这个算法,但在维基上读到它之后,它看起来相当简单。只需将请求发送到服务器节点,并等待收到回复。当/如果您收到回复,您可以开始处理锁定的资源(如果超过50%的节点回复,您可以选择继续,在您的案例中,三分之二)当处理完成时,向服务器节点发送确认(同样,您必须达到总节点数的50%以上)我想我会使用某种形式的两阶段提交协议来确保不会有任何冲突。我将需要一致同意,而不仅仅是多数同意。但我遇到的问题是实际的实现。您可以说“将请求发送到服务器节点,并等待收到回复”。我说,“请求是什么?回答是什么?从代码的角度来看。”我不是一个高级Java程序员,并且几乎没有使用套接字的经验。