Tråde, C#, and queues
Hejsa,har lidt problemer med en kø, som jeg håber i kan hjælpe med.
Jeg har en klasse med en kø, en funktion til at tilføje ting til køen og en tråd til at tømme køen.
Altså mange forskellige tråde tilføjer ting til køen, men kun en tømmer den.
Problemet er så at jeg gerne vil have den tråd, der tømmer køen til at sove når køen er tom (ik spinwait).
Her er lidt kode:
------------
public class QueueHandler
{
private System.Collections.Generic.Queue<int> queue =
new System.Collections.Generic.Queue<int>();
private System.Collections.Generic.Queue<int> writeQueue =
new System.Collections.Generic.Queue<int>();
System.Threading.Thread thread = null;
public QueueHandler()
{
// Create worker thread.
this.thread = new System.Threading.Thread(this.WorkerThread);
// Set priority high.
this.thread.Priority = System.Threading.ThreadPriority.AboveNormal;
// Start thread.
this.thread.Start();
}
public void WorkerThread()
{
while (true)
{
// Switch queues.
System.Threading.Monitor.Enter(this.queue);
this.writeQueue = this.queue;
this.queue = new System.Collections.Generic.Queue<int>();
System.Threading.Monitor.Exit(this.queue);
// Print notification number.
foreach (int e in this.writeQueue)
{
System.Console.WriteLine("Info:" + e.ToString());
}
#warning Do something to awoid busywaiting (sleep)...
}
}
public void AddToQueue(int info)
{
System.Threading.Monitor.Enter(this.queue);
this.queue.Enqueue(info);
System.Threading.Monitor.Exit(this.queue);
#warning Wake thread to do work
}
}
------------