public TripleBuffer() { //caching the delegate means we only have to allocate it once, rather than once per created buffer. finishAction = Finish; for (int i = 0; i < 3; i += 1) { buffers[i] = new ObjectUsage <T>(i, finishAction); } }
void Finish(ObjectUsage <T> obj, UsageType type) { switch (type) { case UsageType.Read: lock (buffers) { buffers[read].usage = UsageType.None; } break; case UsageType.Write: lock (buffers) { buffers[write].usage = UsageType.None; lastWrite = write; } break; } }