软件培训网

欢迎访问软件培训网!招生咨询电话与微信:15225191462(周老师)
软件培训网,专业解决学IT疑难杂症!

首页 > 软件测试/ 正文

Java并发编程之同步互斥问题

2012-09-16 23:49:30

  在操作系统中同步与互斥是一个重要问题,这里主要研究一下怎样用Java来实现操作系统中的一些同步互斥算法。alp软件IT培训网-河南郑州IT培训

  1、软件实现临界区域问题alp软件IT培训网-河南郑州IT培训

  下面给出算法和Java实现代码。alp软件IT培训网-河南郑州IT培训

  1.1 算法2alp软件IT培训网-河南郑州IT培训

  算法2的伪代码如下:alp软件IT培训网-河南郑州IT培训

  do{ flag[i]=true; while(flag[j]); 临界区; flag[i]=false; 剩余区; }while(1)alp软件IT培训网-河南郑州IT培训

  Java实现代码如下:alp软件IT培训网-河南郑州IT培训

  package mutiple_thread; public class OS_SYN_A2{ public static int flag[]=new int [3]; public static int cnt=0; public static void main(String args[]){ class proo implements Runnable{ public proo(){ } @Override public void run() { // TODO Auto-generated method stub while(true){ flag[1]=1; while(flag[2]==1){ } if(cnt==5){ flag[1]=0; }else{ cnt++; System.out.println("pro ++! now id"+cnt); flag[1]=0; } } } } class conn implements Runnable{ @Override public void run() { // TODO Auto-generated method stub while(true){ flag[2]=1; while(flag[1]==1){ } //临界区 if(cnt==0){ flag[2]=0; }else{ cnt--; System.out.println("con --! now id"+cnt); //退出临界区 flag[2]=0; } } } } new Thread(new proo()).start(); new Thread(new conn()).start(); } }alp软件IT培训网-河南郑州IT培训

  这个算法的主要思路是通过设置flag来确定执行哪个线程,但是可能会造成饥饿,因此不行。alp软件IT培训网-河南郑州IT培训

  1.2 算法3alp软件IT培训网-河南郑州IT培训

  算法3通过共享两个变量 flag 和turn来实现同步。alp软件IT培训网-河南郑州IT培训

  package mutiple_thread; public class OS_SYN_A3{ public static int flag[]=new int [3]; public static int turn=0; public static int cnt=0; public static void main(String args[]){ class proo implements Runnable{ public proo(){ } @Override public void run() { // TODO Auto-generated method stub while(true){ flag[1]=1; turn=2; while(flag[2]==1&&turn==2){ } if(cnt==5){ flag[1]=0; }else{ cnt++; System.out.println("pro ++! now id"+cnt); flag[1]=0; } } } } class conn implements Runnable{ @Override public void run() { // TODO Auto-generated method stub while(true){ flag[2]=1; turn=1; while(flag[1]==1&&turn==1){ } //临界区 if(cnt==0){ flag[2]=0; }else{ cnt--; System.out.println("con --! now id"+cnt); //退出临界区 flag[2]=0; } } } } new Thread(new proo()).start(); new Thread(new conn()).start(); } }alp软件IT培训网-河南郑州IT培训

  这是一种正确的软件实现方法。alp软件IT培训网-河南郑州IT培训

  2、经典同步问题的Java实现alp软件IT培训网-河南郑州IT培训

  2.1 读者写者问题alp软件IT培训网-河南郑州IT培训

  这里实现的读者优先的算法,使用了Java并发包的信号量来实现。alp软件IT培训网-河南郑州IT培训

  实现的伪代码如下:alp软件IT培训网-河南郑州IT培训

  读者进程:alp软件IT培训网-河南郑州IT培训

  while(1){ wait(mutex) count++; if(readercount==1){ wait(writer); } signal(mutex); do reading; wait(mutex); cnt--; if(cnt==0){ signal(writer); } signal(mutex); } }alp软件IT培训网-河南郑州IT培训

  算法通过共享writer和mutex两个信号量,来处理同步问题alp软件IT培训网-河南郑州IT培训

  package mutiple_thread;alp软件IT培训网-河南郑州IT培训

  import java.util.concurrent.Semaphore;alp软件IT培训网-河南郑州IT培训

  public class OS_Readerwriter{alp软件IT培训网-河南郑州IT培训

  static Semaphore sem=new Semaphore(1);alp软件IT培训网-河南郑州IT培训

  static Semaphore sem_wrt=new Semaphore(1);alp软件IT培训网-河南郑州IT培训

  static int readercount=0;alp软件IT培训网-河南郑州IT培训

  static String a="hahaha";alp软件IT培训网-河南郑州IT培训

  public static void main(String args[]){alp软件IT培训网-河南郑州IT培训

  class reader implements Runnable{alp软件IT培训网-河南郑州IT培训

  public reader(){alp软件IT培训网-河南郑州IT培训

  }alp软件IT培训网-河南郑州IT培训

  @Overridealp软件IT培训网-河南郑州IT培训

  public void run() {alp软件IT培训网-河南郑州IT培训

  // TODO Auto-generated method stubalp软件IT培训网-河南郑州IT培训

  try {alp软件IT培训网-河南郑州IT培训

  sem.acquire();alp软件IT培训网-河南郑州IT培训

  readercount++;alp软件IT培训网-河南郑州IT培训

  } catch (InterruptedException e) {alp软件IT培训网-河南郑州IT培训

  // TODO Auto-generated catch blockalp软件IT培训网-河南郑州IT培训

  e.printStackTrace();alp软件IT培训网-河南郑州IT培训

  }alp软件IT培训网-河南郑州IT培训

  if(readercount==1){alp软件IT培训网-河南郑州IT培训

  try {alp软件IT培训网-河南郑州IT培训

  sem_wrt.acquire();alp软件IT培训网-河南郑州IT培训

  } catch (InterruptedException e) {alp软件IT培训网-河南郑州IT培训

  // TODO Auto-generated catch blockalp软件IT培训网-河南郑州IT培训

  e.printStackTrace();alp软件IT培训网-河南郑州IT培训

  }alp软件IT培训网-河南郑州IT培训

  }alp软件IT培训网-河南郑州IT培训

  sem.release();alp软件IT培训网-河南郑州IT培训

  System.out.println("Reading "+a);alp软件IT培训网-河南郑州IT培训

  try {alp软件IT培训网-河南郑州IT培训

  sem.acquire();alp软件IT培训网-河南郑州IT培训

  } catch (InterruptedException e) {alp软件IT培训网-河南郑州IT培训

  // TODO Auto-generated catch blockalp软件IT培训网-河南郑州IT培训

  e.printStackTrace();alp软件IT培训网-河南郑州IT培训

  }alp软件IT培训网-河南郑州IT培训

  readercount--;alp软件IT培训网-河南郑州IT培训

  if(readercount==0){alp软件IT培训网-河南郑州IT培训

  sem_wrt.release();alp软件IT培训网-河南郑州IT培训

  }alp软件IT培训网-河南郑州IT培训

  sem.release();alp软件IT培训网-河南郑州IT培训

  }alp软件IT培训网-河南郑州IT培训

  }alp软件IT培训网-河南郑州IT培训

  class writer implements Runnable{alp软件IT培训网-河南郑州IT培训

  public writer(){alp软件IT培训网-河南郑州IT培训

  }alp软件IT培训网-河南郑州IT培训

  @Overridealp软件IT培训网-河南郑州IT培训

  public void run() {alp软件IT培训网-河南郑州IT培训

  // TODO Auto-generated method stubalp软件IT培训网-河南郑州IT培训

  try {alp软件IT培训网-河南郑州IT培训

  sem_wrt.acquire();alp软件IT培训网-河南郑州IT培训

  } catch (InterruptedException e) {alp软件IT培训网-河南郑州IT培训

  // TODO Auto-generated catch blockalp软件IT培训网-河南郑州IT培训

  e.printStackTrace();alp软件IT培训网-河南郑州IT培训

  }alp软件IT培训网-河南郑州IT培训

  a=a+"abc";alp软件IT培训网-河南郑州IT培训

  System.out.println("Writing "+a);alp软件IT培训网-河南郑州IT培训

  sem_wrt.release();alp软件IT培训网-河南郑州IT培训

  }alp软件IT培训网-河南郑州IT培训

  }alp软件IT培训网-河南郑州IT培训

  for(int i=1;i<=10;i++){alp软件IT培训网-河南郑州IT培训

  new Thread(new writer()).start();alp软件IT培训网-河南郑州IT培训

  new Thread(new reader()).start();alp软件IT培训网-河南郑州IT培训

  }alp软件IT培训网-河南郑州IT培训

  }alp软件IT培训网-河南郑州IT培训

  }alp软件IT培训网-河南郑州IT培训


Tags:郑州哪个学校计算机专业好,郑州中专哪个学校好,河南省计算机专业中专有哪些学校,河南鹤壁学电脑好的学校,郑州技校排名技校都有什么专业,河南计算机专业大专学校哪家好

搜索
软件培训学校哪家好,就来软件培训网咨询
软件培训学校哪家好,就来软件培训网咨询
热门标签
软件培训学校哪家好,就来软件培训网咨询
软件培训学校哪家好,就来软件培训网咨询
软件培训学校哪家好,就来软件培训网咨询
  • QQ交谈