Example #1
0
        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);
                }
            }
        }
Example #2
0
        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);
            }
        }