public void Put(CPUProcess process) { lock (this) { if (_internalQueue1.Count > _internalQueue2.Count) { _internalQueue2.Enqueue(process); } else { _internalQueue1.Enqueue(process); } } }
public void StartProcessing() { while (_canProcess) { CPUProcess process = _queue.Get(); if (process != null) { IsProcessing = true; Thread.Sleep(_random.Next(_minTimeOfProcess, _maxTimeOfProcess + 1)); } else { IsProcessing = false; } } }
static void Main(string[] args) { var firstProcessesQueue = new CPUQueue(maxSize: 7); var secondProcessesQueue = new CPUQueue(maxSize: 7); var cpu = new CPU(firstProcessesQueue, secondProcessesQueue); var firstCpuProcess = new CPUProcess( cpuProcessId: 1, firstProcessesQueue, cpu, minProcessDurationMs: 3000, maxProcessDurationMs: 6000); var secondCpuProcess = new CPUProcess( cpuProcessId: 2, secondProcessesQueue, cpu, minProcessDurationMs: 2000, maxProcessDurationMs: 5000); var cpuThread = new Thread(cpu.Run); var firstCpuProcessThread = new Thread(firstCpuProcess.GenerateProcesses); var secondCpuProcessThread = new Thread(secondCpuProcess.GenerateProcesses); cpuThread.Start(); firstCpuProcessThread.Start(); secondCpuProcessThread.Start(); }
public void AddProcessToQueue(CPUProcess process) { _queue.Put(process); }