操作系统实验一:并发程序设计

一、实验目的

1)加深对进程并发执行的理解,认识多进程并发执行的实质。

2)观察进程共享资源的现象,学习解决进程互斥和同步的方法。

 

二、实验要求:

本实验要求用高级语言,启动多进程并发运行,设计相应代码,显示进程无关并发、进程共享变量并发的运行结果。并完成实验报告。

  

三、实验内容:

分别实现以下四种情况的并发:

1.并发的进程之间无关,显示进程名称,开始与结束时间。

模拟多终端售票情况,并发的多个终端进程之间共享剩余票数这个共享变量。

2.用全局变量实现。

3.用进程间共享数据机制实现。

4.用进程间共享数据机制和加锁机制实现。

 

四、实验过程与结果

  1. 算法思想与设计
  2. 算法实现代码
  3. 运行结果
public  class  SellTicket  implements  Runnable{
     public  static  void  main(String[] agrs){
         Object A =  "A" ; //对象A的锁
         Object B =  "B" ; //对象B的锁
         Object C =  "C" ;
 
         SellTicket sA =  new  SellTicket(C,A);
         SellTicket sB =  new  SellTicket(A,B);
         SellTicket sC =  new  SellTicket(B,C);
         Thread tA =  new  Thread(sA, "A线程" );
         Thread tB =  new  Thread(sB, "B线程" );
         Thread tC =  new  Thread(sC, "C线程" );
 
         tA.start();
         try {
             Thread.sleep( 100 );
         } catch  (InterruptedException e){
             e.printStackTrace();
         }
         tB.start();
         try {
             Thread.sleep( 100 );
         } catch  (InterruptedException e){
             e.printStackTrace();
         }
         tC.start();
         
 
         try {
             Thread.sleep( 10000 );
         } catch (InterruptedException e){
             e.printStackTrace();
         }
 
         synchronized (B){
             B.notify();
         }
     }
 
     public  static  int  count =  10 ; //全局票数
     public  volatile  boolean  why =  true ;
     private  Object prev;
     private  Object self;
 
     public  SellTicket(Object prev,Object self){
         this .prev = prev;
         this .self = self;
     }
 
     @Override
     public  void  run(){
         while (print());
     }
 
     private  boolean  print(){
         while (count >  0 ){
             synchronized  (prev) {
                 synchronized  (self){
                     System.out.println(Thread.currentThread().getName() + "卖出第:" + count-- + "张,剩余"+count+"张");
                     count --;
                     System.out.println(Thread.currentThread().getName()+ self  +  ".notify" );
                     self.notify();
                 }
                 if (!(count== 0 )){
                     try {
                         System.out.println(Thread.currentThread().getName() + prev +  ".wait" );
                         prev.wait();
                     catch  (InterruptedException e){
                         e.printStackTrace();
                     }
                 }
             }
             System.out.println(Thread.currentThread().getName()+"return true");
             return  true ;
         }
         System.out.println(Thread.currentThread().getName()+"return false");
         return  false ;
     }
}

你可能感兴趣的:(操作系统实验一:并发程序设计)