|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.12.2014, 15:35 | #1 |
Регистрация: 13.12.2014
Сообщений: 4
|
Очередь процессов
Всем привет! Вообщем в java я новичок(совсем). Решил вот написать программку: Есть один поток процессов, который обслуживается одним процессором с одной очередью. Хочу сделать так, чтобы программа пихала процесс в очередь, а процессор брал и выполнял процессы из очереди. Вроде бы простая задачка, НО мне совсем не даётся. Прошу поделиться кодом, ссылками, чем угодно, что помогло бы решить задачу.
Собственно проблема именно с реализацией очереди( наверное ) Вот что у меня есть: public interface ISemaphore { public void release(); } //processor public class CPU implements ISemaphore { private int processorsCount=1; private int allProcessCount=0,destroyedProcessC ount=0; private final Semaphore semaphore; public int getAllProcessCount() { return allProcessCount; } public int getDestroyedProcessCount() { return destroyedProcessCount; } public CPU() { this.semaphore=new Semaphore(this.processorsCount); } public CPU(int processorsCount) { this.processorsCount=processorsCoun t; this.semaphore=new Semaphore(this.processorsCount); } public void runProcess(CPUProcess process) { allProcessCount++; if (semaphore.tryAcquire()) { process.start(); } else { destroyedProcessCount++; process=null; } } public void release() { semaphore.release(); } } //process public class CPUProcess extends Thread{ private ISemaphore semaphore; private int runTime; public CPUProcess(ISemaphore semaphore, int runTime) { this.runTime=runTime; this.semaphore=semaphore; } public void run() { try { Thread.sleep(runTime); } catch (InterruptedException e) { System.err.println(e); } semaphore.release(); } } public class Main1 { /** * @param args the command line arguments */ public static void main(String[] args) { CPU processors=new CPU(); try { CPUProcess proc; proc=new CPUProcess(processors,10); processors.runProcess(proc); Thread.sleep(100); proc=new CPUProcess(processors,10); processors.runProcess(proc); proc=new CPUProcess(processors,10); processors.runProcess(proc); proc.join(); } catch (InterruptedException e) { System.err.println(e); } System.out.println("count: "+processors.getAllProcessCount ()); System.out.println("kill: "+processors.getDestroyedProcessCou nt()); } } |
13.12.2014, 17:14 | #2 |
Форумчанин
Регистрация: 25.09.2009
Сообщений: 234
|
Если я правильно понял задачу, то есть два основных варианта ее реализации:
1) Вычислительная часть процессов (в примере, CPUProccess) выполняется самими этими процессами, а основной процесс (CPU) их только запускает в отдельном потоке. 2) Вычислительная часть процессов (в примере, CPUProccess) выполняется основным процессом (в примере, CPU). Код:
Код:
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
вводим 15 элементов в очередь, затем выводим на экран эту очередь и добавил в очередь еще один элемент. Потом удаляем любой элемен | Xumera | C++ Builder | 2 | 07.12.2013 13:56 |
Убийца процессов | Sh.I.Va | Помощь студентам | 20 | 15.11.2012 16:05 |
Создание задания, добавление процессов, удаление процессов | RAZOR1703 | Win Api | 12 | 16.02.2012 18:07 |
Связка процессов | MCLotos | Операционные системы общие вопросы | 2 | 10.04.2010 20:22 |
Блокировка процессов | Zeraim | Операционные системы общие вопросы | 5 | 17.04.2008 13:02 |