ReadWriteObjectLock.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / xsp / System / Web / Util / ReadWriteObjectLock.cs / 1 / ReadWriteObjectLock.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

/* 
 * ReadWriteObjectLock 
 *
 * Copyright (c) 1998-1999, Microsoft Corporation 
 *
 */

namespace System.Web.Util { 

    using System.Runtime.Serialization.Formatters; 
    using System.Threading; 

    class ReadWriteObjectLock { 
        // Assumption:
        // -1 = a writer has the lock
        //  0 = no one has the lock
        // >0 = number of readers using the lock 
        private int _lock;
 
        internal ReadWriteObjectLock() { 
        }
 
        internal virtual void AcquireRead() {
            lock(this) {
                while (_lock == -1) {
                    try { 
                        Monitor.Wait(this);
                    } 
                    catch (ThreadInterruptedException) { 
                        // Just keep looping
                    } 
                }

                _lock++;
            } 
        }
 
        internal virtual void ReleaseRead() { 
            lock(this) {
                Debug.Assert(_lock > 0); 

                _lock--;
                if (_lock == 0) {
                    Monitor.PulseAll(this); 
                }
            } 
        } 

        internal virtual void AcquireWrite() { 
            lock(this) {
                while (_lock != 0) {
                    try {
                        Monitor.Wait(this); 
                    }
                    catch (ThreadInterruptedException) { 
                        // Just keep looping 
                    }
                } 

                _lock = -1;
            }
        } 

        internal virtual void ReleaseWrite() { 
            lock(this) { 
                Debug.Assert(_lock == -1);
 
                _lock = 0;
                Monitor.PulseAll(this);
            }
        } 
/*
        internal virtual void AssertReadLock() { 
#if DBG 
            Debug.Assert(_lock > 0);
#endif 
        }


        internal virtual void AssertWriteLock() { 
#if DBG
            Debug.Assert(_lock == -1); 
#endif 
        }
*/ 
    }

}
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK