题目是这样的:按照狄更斯算法,算法都在我写的程序里面了,要求两架飞船进港,同时只能是一架飞机进港,他们之间用global参数来进行racecondition.现在我把大体的程序写了一下,我不...
题目是这样的:按照狄更斯算法,算法都在我写的程序里面了,要求两架飞船进港,同时只能是一架飞机进港,他们之间用global参数来进行race condition. 现在我把大体的程序写了一下,我不会用thread,所以画葫芦写一个不能执行的
主要有这么几个问题
1.global参数在什么地方定义,是在main里面,还有main前面,还有要再建立一个class来存着,这个global参数要求是两个飞船都要能访问和修改的。
2.怎么让两个飞船进港的程序一起跑起来,不能用java的控制函数防止竞争,要求用我写的那个算法来竞争。
3.我用method来写那个进港的操作,其实就是屏幕输出,这样两个class thread的类都可以调用的到吗?
4。我估计我这个程序是跑不起来的,只能请高手给改改了
public class ShuttleBoarding
{
public int c1=0, c2=0, turn=1; //全局变量,不知道怎么能够被其他两个class共享调用
public static void main(String[] args){
Atlantic a= new Atlantic();
Ranger b= new Ranger();
a.start();
b.start();
}
}
/* 亚特兰大号 */
class Atlantic extends Thread // 亚特兰大号
{
public Atlantic(){ //是否应该把global参数从这里传进来???
}
public void run() { //不清楚run()函数的作用
int loop=1;
while (loop==1){ //while(ture)
c1=1; // 设定自己要进港
//判断对方是否要进港
while(C2==1){
if(turn==2){ //如果不是自己的tun
c1=0; //撤销自己进港
while(turn==2); //spin lock 直到是自己的turn
c1=1; //轮到turn=1后,设定自己要进港
}
}
landingConOffice("Atlantic");//这里是进港的程序 critical section部分
c1=0;
turn=2; //释放自己的资源
}
}
}
/* Ranger号*/
class Ranger extends Thread // 亚特兰大号
{
public Ranger(){}
public void run(){
int loop=1;
while (loop==1){ //while(ture)
c2=1; // 设定自己要进港
//判断对方是否要进港
while(C1==1){
if(turn==1){ //如果不是自己的tun
c2=0; //撤销自己进港
while(turn==1); //spin lock 直到是自己的turn
c2=1; //轮到turn=1后,设定自己要进港
}
}
landingConOffice("Ranger");//这里是进港的程序
c2=0;
turn=1; //释放自己的资源
}
}
}
// 进港程序,用method来描述,传输一个飞船名字作为参数
public static void landingConOffice(String name) { // landing controll office的动作,critical section 那部分
System.out.println(name+" is granted permission to land.");
System.out.println(name+" call the ball!");
System.out.println(name+", permission is granted for final approach.")
}
展开