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

资源简介

进程同步的模拟与实现 阅览室读书问题:假定一个阅览室最多可容纳100 人,读者进入和离开阅览室时都必须在阅览室门 口的一个登记表上进行登记,而且每次只允许一 人进行登记操作。请用信号量实现上述进程的同 步问题。

资源截图

代码片段和文件信息

package hair;
import java.awt.Color;
import java.awt.Container;
import java.util.Random;
import java.util.concurrent.Semaphore;
import javax.swing.*;


public class ReadingRoom extends Jframe{

/**
 * 
 */
private static final long serialVersionUID = 1L;
static int readers = 0;//读者人数
static int seats = 5;//阅览室的空座位数,初值为5
static Semaphore mutex = new Semaphore(1);//互斥信号量,初值为1
boolean regist=true;

static Sofa j1;
static Sofa j2;
static Sofa j3 ;
static Sofa j4 ;
static Sofa j5;
static Sofa j6;
static Sofa j7;
static Sofa j8 ;
static Sofa j9 ;
static Sofa j10;
static JButton j ;
    static Sofa[] sofas;
public ReadingRoom(){
Container c = getContentPane();
setBounds(550 240 600 600);
setLayout(null);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setVisible(true);
settitle(“图书阅览室“);

    j1 = new Sofa(“空闲“);
j2 = new Sofa(“空闲“);
j3 = new Sofa(“空闲“);
j4 = new Sofa(“空闲“);
j5 = new Sofa(“空闲“);
j6 = new Sofa(“空闲“);
j7 = new Sofa(“空闲“);
j8 = new Sofa(“空闲“);
j9 = new Sofa(“空闲“);
j10 = new Sofa(“空闲“);
j = new Sofa(“登记处“);


j1.setBounds(20 300 80 60);
j2.setBounds(110 300 80 60);
j3.setBounds(200 300 80 60);
j4.setBounds(290 300 80 60);
j5.setBounds(380 300 80 60);
j6.setBounds(20 400 80 60);
j7.setBounds(110 400 80 60);
j8.setBounds(200 400 80 60);
j9.setBounds(290 400 80 60);
j10.setBounds(380 400 80 60);
j.setBounds(160 50 150 100);

c.add(j1);
c.add(j2);
c.add(j3);
c.add(j4);
c.add(j5);
c.add(j6);
c.add(j7);
c.add(j8);
c.add(j9);
c.add(j10);
c.add(j);
    sofas = new Sofa[]{j1j2j3j4j5j6j7j8j9j10};

}

public void open(){
while(true){
try {
Thread.sleep((long) (Math.random()*5000));
} catch (InterruptedException e) {
e.printStackTrace();
}
new Thread(new Reader(createName())).start();
}
}
public static void main(String args[]) throws InterruptedException {
ReadingRoom rr = new ReadingRoom();
rr.open();
}

/*
 * 判断阅览室座位是否为满
 */
public synchronized static boolean isFull() {
if (readers == seats) {
return true;
}
return false;
}

/*
 * 读者进入阅览室

评论

共有 条评论