Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/ExecutorQueue.cs @ 6203

Last change on this file since 6203 was 6203, checked in by ascheibe, 13 years ago

#1233

  • dropped dependency of Core from Executor
  • enabled sandboxing
  • moved most parts of Job handling from Core to SlaveJob to simplify locking
  • optimized how UsedCores is handled
  • SlaveStatusInfo is now thread-save and counts jobs more correct
File size: 1.6 KB
Line 
1
2using System;
3using System.Collections.Generic;
4using System.Threading;
5namespace HeuristicLab.Clients.Hive.SlaveCore {
6
7  public class ExecutorQueue : MarshalByRefObject {
8    private Queue<ExecutorMessage> queue = null;
9    private Semaphore semaphore = null;
10
11    /// <summary>
12    /// Creates a new MessageQueue Object.
13    /// A new Queue and a Semaphore is created. The Semaphore is set to a max size of 5000.
14    /// </summary>
15    public ExecutorQueue() {
16      queue = new Queue<ExecutorMessage>();
17      semaphore = new Semaphore(0, 5000);
18    }
19
20    /// <summary>
21    /// Returns the oldest ExecutorMessage Object from the Queue.
22    /// </summary>
23    /// <returns>the oldest ExecutorMessage Object</returns>
24    public ExecutorMessage GetMessage() {
25      semaphore.WaitOne();
26      lock (this) {
27        if (queue.Count > 0) {
28          return queue.Dequeue();
29        }
30      }
31      return null;
32    }
33
34    /// <summary>
35    /// Adds a ExecutorMessage Object to the Queue
36    /// </summary>
37    /// <param name="message">the ExecutorMessage</param>
38    public void AddMessage(ExecutorMessage message) {
39      lock (this) {
40        queue.Enqueue(message);
41        semaphore.Release();
42      }
43    }
44
45    /// <summary>
46    /// Adds a message to the Queue. The ExecutorMessage Object is built in the Method
47    /// </summary>
48    /// <param name="message">the Message</param>
49    public void AddMessage(ExecutorMessageType message) {
50      lock (this) {
51        queue.Enqueue(new ExecutorMessage(message));
52        semaphore.Release();
53      }
54    }
55  }
56}
Note: See TracBrowser for help on using the repository browser.