Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LAB_11_12.docx
Скачиваний:
3
Добавлен:
03.09.2019
Размер:
47.93 Кб
Скачать

Лбораторне завдання (варіант 19)

Варіант 19. Програма моделює обслуговування двох потоків процесів з різними параметрами двома центральними процесором комп'ютера. Для кожного потоку задається своя черга. Процес з кожного потоку поступає на свій процесор, і лише у тому випадку, коли в своїй черзі немає процесу, процесор бере на обробку чужий процес. Визначте максимальний розмір для кожної з черг.

Текст програми результат виконання програми

class Process

public class Process {

String name;

Process(String str){

name = str;

}

String getName(){

return name;

}

}

class CPU2

public class CPU2 extends Thread{

public synchronized void run(){

while ((Source.first_ended == false) && (Source.first.isEmpty() == false)||(Source.second_ended == false) && (Source.second.isEmpty() == false)){

if (Source.second.isEmpty()== false){

System.out.println(Source.second.getProc().getName()+" worked by CPU2");

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} else if (Source.first.isEmpty()==false){

System.out.println(Source.first.getProc().getName()+" worked by CPU2");

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}else {

try {

Thread.sleep(500);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

}

class CPU1

public class CPU1 extends Thread {

public synchronized void run(){

while ((Source.first_ended == false) && (Source.first.isEmpty() == false)||(Source.second_ended == false) && (Source.second.isEmpty() == false)){

if (Source.first.isEmpty()== false){

System.out.println(Source.first.getProc().getName()+" worked by CPU1");

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

} else if (Source.second.isEmpty()==false){

System.out.println(Source.second.getProc().getName()+" worked by CPU1");

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}else {

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

}

class QUEUE

import java.util.Vector;

public class QUEUE {

Vector <Process> queue;

QUEUE(){

queue = new Vector<Process>();

}

public void addProc(Process tmp){

queue.add(tmp);

}

public Process getProc(){

Process tmp = queue.firstElement();

queue.remove(0);

return tmp;

}

public boolean isEmpty(){

return queue.isEmpty();

}

int countOfProc(){

return queue.size();

}

}

class SysTread

public class SysTread extends Thread{

private int count;

private int num;

SysTread (int CountProc, int numb){

count = CountProc;

num = numb;

}

public synchronized void run(){

if (num ==1){

for (int i = 0; i<count; ++i){

Process tmp = new Process("Process "+ i);

Source.first.addProc(tmp);

System.out.println(tmp.getName()+ " added in queue #" + num);

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

System.out.println("Thread "+ num+ "loaded, max size of queue="+Source.first.countOfProc());

Source.first_ended = true;

} else {

for (int i = 0; i<count; ++i){

Process tmp = new Process("Process "+ (i+1)*10);

Source.second.addProc(tmp);

System.out.println(tmp.getName()+ " added in queue #" + num);

try {

Thread.sleep(700);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

System.out.println("Thread "+ num+ "loaded, max size of queue="+Source.second.countOfProc());

Source.second_ended = true;

}

}

}

class Source

public class Source {

public static boolean first_ended = false;

public static boolean second_ended = false;

public static QUEUE first = new QUEUE();

public static QUEUE second = new QUEUE();

public static void main (String[] args){

SysTread Thr1 = new SysTread(10,1);

SysTread Thr2 = new SysTread(6,2);

CPU1 cpu1 = new CPU1();

CPU2 cpu2 = new CPU2();

Thr1.start();

Thr2.start();

cpu1.start();

cpu2.start();

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]