private static void ReleaseInitByte(ref InitStatus initByte, object mutex) { lock (mutex) { bool hasWaiting = initByte.HasFlag(InitStatus.Waiting); initByte = InitStatus.Complete; if (hasWaiting) { Monitor.PulseAll(mutex); } } }
private static bool AcquireInitByte(ref InitStatus initByte, object mutex) { lock (mutex) { while (initByte.HasFlag(InitStatus.Pending)) { initByte |= InitStatus.Waiting; Monitor.Wait(mutex); } if (initByte == InitStatus.Complete) { return(false); } initByte = InitStatus.Pending; return(true); } }