using System;
using System.Threading;
public class Program
{
public static void Main()
var myQueue = new Queue(3);
//myQueue.Dequeue();
myQueue.Enqueue(1);
myQueue.Enqueue(2);
myQueue.Enqueue(3);
//myQueue.Enqueue(4);
myQueue.Dequeue();
}
public class Queue
int[] values;
int head;
int tail;
Mutex mutex;
public Queue(int size)
values = new int[size];
head = -1;
tail = 0;
mutex = new Mutex();
public void Enqueue(int value)
if(tail != head)
values[tail] = value;
if(head == -1)
head = tail;
tail = (tail + 1) % values.Length;
else
throw new ApplicationException("Queue Full");
public int Dequeue()
throw new ApplicationException("Queue Empty");
var temp = values[head];
head = (head + 1) % values.Length;
if(head == tail)
return temp;