Exemple #1
0
        //private static object _getterLock = new object();
        private DispatchQueue GetDispatchQueue(BlockingPriorityQueue <DispatchQueue> blockerQueue)
        {
            DispatchQueue queue = blockerQueue.Peek();

            if (queue == null || blockerQueue.Count() < MAX_QUEUE_SIZE || (blockerQueue.Count() >= MAX_QUEUE_SIZE && queue.Size() >= MAX_QUEUE_TOLERANCE))
            {
                queue = new DispatchQueue("Concurrent Queue " + blockerQueue.Count(), PriorityForQueue(blockerQueue));
            }
            else
            {
                queue = blockerQueue.Dequeue();
            }
            Console.WriteLine("Queue has " + queue.Size() + " jobs");
            Console.WriteLine(blockerQueue.Count() + " Queues");
            blockerQueue.enqueue(queue);

            lock (_monitorLock)
            {
                Monitor.Pulse(_monitorLock);
            }
            return(queue);
        }
Exemple #2
0
 private void CheckPriorityQueue(BlockingPriorityQueue <DispatchQueue> queue)
 {
     while (queue.Count() > MAX_QUEUE_SIZE)
     {
         DispatchQueue dQueue = queue.Dequeue();
         if (dQueue == null)
         {
             return;
         }
         if (dQueue.State == DispatchQueue.QueueState.Idle || dQueue.State == DispatchQueue.QueueState.Disposed)
         {
             dQueue.Dispose();
             Console.WriteLine("Removing queue");
         }
         else
         {
             break;
         }
     }
 }
Exemple #3
0
        private void QueueMonitor()
        {
            bool check;

            while (true)
            {
                check = false;

                if (_defaultQueues.Count() > MAX_QUEUE_SIZE)
                {
                    check = true;
                    CheckPriorityQueue(_defaultQueues);
                }
                if (_highQueues.Count() > MAX_QUEUE_SIZE)
                {
                    check = true;
                    CheckPriorityQueue(_highQueues);
                }
                if (_lowQueues.Count() > MAX_QUEUE_SIZE)
                {
                    check = true;
                    CheckPriorityQueue(_lowQueues);
                }
                if (_backgroundQueues.Count() > MAX_QUEUE_SIZE)
                {
                    check = true;
                    CheckPriorityQueue(_backgroundQueues);
                }

                if (!check)
                {
                    lock (_monitorLock) {
                        Monitor.Wait(_monitorLock);
                    }
                }
                else
                {
                    Thread.Sleep(500);
                }
            }
        }