예제 #1
0
        private void AddProcessesToIdleProcessors(int numToAdd)
        {
            var processors             = Processors;
            var idlingProcessors       = processors.Where(processor => processor.IsIdling);
            var idlingProcessorsAsList = idlingProcessors.ToList();

            foreach (var processor in idlingProcessorsAsList)
            {
                if (ProcessProducer.CanProduce(numToAdd))
                {
                    processor.AddToLocalQueue(ProcessProducer.ProduceProcesses(numToAdd, processor.CurrentClockCycle));
                }
                else if (!ProcessProducer.IsDoneProducing)
                {
                    var leftoverProcesses = ProcessProducer.ProcessesCanProduce;
                    processor.AddToLocalQueue(
                        ProcessProducer.ProduceProcesses(leftoverProcesses, processor.CurrentClockCycle));
                }
                else if (ProcessProducer.IsDoneProducing)
                {
                    break;
                }
            }

            Processors.RemoveAll(processor => processor.IsIdling);
            Processors.AddRange(idlingProcessorsAsList);
        }
예제 #2
0
 /// <summary>
 ///     Adds processes to each producer by at most the given amount.
 /// </summary>
 /// <param name="numToAddPerProcessor">The maximum number of processes to allot to each processor.</param>
 private void AddProcessesToProcessors(int numToAddPerProcessor)
 {
     foreach (var processor in Processors)
     {
         if (ProcessProducer.CanProduce(numToAddPerProcessor))
         {
             processor.AddToLocalQueue(ProcessProducer.ProduceProcesses(numToAddPerProcessor, 0));
         }
         else if (ProcessProducer.IsDoneProducing)
         {
             break;
         }
         else
         {
             var producerCanProduce = ProcessProducer.ProcessesCanProduce;
             processor.AddToLocalQueue(ProcessProducer.ProduceProcesses(producerCanProduce, 0));
         }
     }
 }