using System;
using System.Threading;
public class RingQueue
{
private int size;
private int read = 0;
private int write = 0;
private int count = 0;
private T[] objects;
private AutoResetEvent addEvent;
private AutoResetEvent popEvent;
public RingQueue (int size)
{
addEvent = new AutoResetEvent (false);
popEvent = new AutoResetEvent (false);
this.size = size;
objects = new T[size + 1];
}
public bool Empty {
get {
lock (this) {
return (read == write) && (count == 0);
}
}
}
public bool Full {
get {
lock (this) {
return (read == write) && (count > 0);
}
}
}
public void Add (T item)
{
lock (popEvent) {
if (Full) {
popEvent.WaitOne ();
}
objects[write] = item;
count++;
write = (write + 1) % size;
addEvent.Set ();
}
}
public T Pop ()
{
lock (addEvent) {
if (Empty) {
addEvent.WaitOne ();
}
T item = objects[read];
count--;
read = (read + 1) % size;
popEvent.Set ();
return item;
}
}
}
Monday, October 25, 2010
Generic Thread Safe RingQueue in C#
Subscribe to:
Post Comments (Atom)
Popular Posts
-
These are the robots I've been working on for the last 12 months. They each weigh about 11 tonnes and have a 17 meter reach. The control...
-
This hard-to-see screenshot is a Generic Node Graph Editing framework I'm building. I'm hoping it can be used for any kind of node...
-
So, you've created a car prefab using WheelCollider components, and now you can apply a motorTorque to make the whole thing move along. ...
-
MiddleMan: A Pub/Sub and Request/Response server in Go. This is my first Go project. It is a rewrite of an existing Python server, based o...
-
Why would I ask that question? Python 3 has been available for some time now, yet uptake is slow. There aren't a whole lot of packages i...
-
It is about 8 degrees C this morning. So cold, especially when last week we had high twenties. To help solve the problem, a friend suggeste...
-
After my last post, I decided to benchmark the scaling properties of Stackless, Kamaelia, Fibra using the same hackysack algorithm. Left axi...
-
I'm now using bzr instead of svn. I'm pushing my repositories to: http://exactlysimilar.org/bzr/ I'm also auto publishing docume...
-
I've just read a newspaper article (courtesy of Kranzky ) from WA Business News documenting the malfeasance, gross negligence and misc...
-
Possibly slightly more correct lighting. The rim light is now only applied in the direction of the sun, rather than being purely based on vi...
No comments:
Post a Comment