• 大小: 9KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: Java
  • 标签: lamport  java  

资源简介

java实现同步算法在分布式系统中的实现与应用,用lamport算法解决停车场问题

资源截图

代码片段和文件信息

import java.util.linkedList;
import java.util.ListIterator;

import javax.swing.JOptionPane;

public class EntryPort {
private int logicalTime = 0 replyCount = 0 joinReply;
public int unoccupiedNum entryNum exitNum totalPortNum; 
public Mailbox mailbox;
private int id;
private boolean criticalEntered = false;
private Message applyMsg = null;
private linkedList appList;

public EntryPort(int id InitialView initialView)
{
this.unoccupiedNum = initialView.unoccupiedNum;//空位数
this.entryNum = initialView.entryNum;
this.exitNum = initialView.exitNum;
this.totalPortNum = this.entryNum + this.exitNum;
this.id = id;//本地ID号
this.mailbox = new Mailbox(initialView);
appList = new linkedList();
}

public synchronized void apply(){
try
{
if(unoccupiedNum == 0){
JOptionPane.showMessageDialog(null“There is no space left now. Please wait...“
“Info“JOptionPane.INFORMATION_MESSAGE);
return ;
}

Message applyMsg = new Message(1 logicalTime 0 id 1);
++logicalTime;

replyCount = entryNum - 1;

for(int i = 0; i < entryNum; ++i)
{
applyMsg.clock = logicalTime;
++logicalTime;
if (id != i)
{
mailbox.send(1 i applyMsg);
}
}

while(replyCount != 0)
{
wait();
}

while (unoccupiedNum == 0)
{
wait();
}

criticalEntered = true;

release();
}
catch(Exception e)
{
System.out.println(e);
}
}

public synchronized void jion(){
try
{
joinReply = entryNum - 1;
Message msg = new Message(5 -1 0 id 1);

for(int i = 0; i < entryNum; ++i)
{
msg.clock = logicalTime;
++logicalTime;
if (id != i)
{
mailbox.send(1 i msg);
}
}

while(joinReply != 0)
{
wait();
}

criticalEntered = true;

joinReply = exitNum;
for(int i = 0; i < exitNum; ++i)
{
msg.clock = logicalTime;
++logicalTime;
mailbox.send(0 i msg);
}

while(joinReply != 0)
{
wait();
}

msg = new Message(1 logicalTime logicalTime id 1);
for(int i = 0; i < exitNum; ++i)
{
msg.clock = logicalTime;
++logicalTime;
mailbox.send(0 i msg);
}

msg = new Message(2 logicalTime logicalTime id 1);
ListIterator iter = appList.listIterator();
while(iter.hasNext())
{
msg.clock = logicalTime;
++logicalTime;
mailbox.send(1 msg.source msg);
iter.remove();
}
applyMsg = null;
criticalEntered = false;
System.out.println(“A new entry has been added successfully!“);
}
catch(Exception e)
{
System.out.println(e);
}
}

public  void receive(){
try
{
Message msg = mailbox.pop();
synchronized(this)
{
logicalTime = 1 + ((msg.clock > logicalTime)? msg.clock : logicalTime);
//1:application; 2:reply; 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       6546  2009-01-01 21:41  停车场问题实验源程序\EntryPort.java

     文件       2512  2009-01-01 15:17  停车场问题实验源程序\ExitPort.java

     文件       4695  2008-12-21 20:53  停车场问题实验源程序\InitialView.java

     文件        714  2008-12-16 10:54  停车场问题实验源程序\ListTest.java

     文件       1084  2009-01-01 15:18  停车场问题实验源程序\Mailbox.java

     文件        459  2009-01-01 15:02  停车场问题实验源程序\Message.java

     文件        203  2008-12-16 11:17  停车场问题实验源程序\NewTest.java

     文件         28  2008-12-13 13:26  停车场问题实验源程序\Port.java

     文件       3561  2009-01-01 08:56  停车场问题实验源程序\PortPanel.java

     文件       1007  2008-12-15 14:17  停车场问题实验源程序\Test.java

     文件        279  2008-12-19 17:14  停车场问题实验源程序\Test1.java

     文件        567  2008-12-16 10:43  停车场问题实验源程序\UseClass.java

     目录          0  2009-01-01 15:16  停车场问题实验源程序

----------- ---------  ---------- -----  ----

                21655                    13


评论

共有 条评论