ReaderWriterLockWrapper.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Shared / MS / Internal / ReaderWriterLockWrapper.cs / 1305600 / ReaderWriterLockWrapper.cs

                            //---------------------------------------------------------------------------- 
//
// 
//    Copyright (C) Microsoft Corporation.  All rights reserved.
//  
//
// 
// Description: 
// Wrapper that allows a ReaderWriterLock to work with C#'s using() clause
// 
// History:
//  07/23/2003 : BrendanM Ported to WCP
//
//--------------------------------------------------------------------------- 

 
using System; 
using System.Threading;
using MS.Internal.WindowsBase; 

namespace MS.Internal
{
    // Wrapper that allows a ReaderWriterLock to work with C#'s using() clause 
    [FriendAccessAllowed] // Built into Base, used by Core and Framework.
    internal class ReaderWriterLockWrapper 
    { 
        //-----------------------------------------------------
        // 
        //  Constructors
        //
        //-----------------------------------------------------
 
        #region Constructors
 
        internal ReaderWriterLockWrapper() 
        {
            _rwLock = new ReaderWriterLock(); 
            _awr = new AutoWriterRelease(_rwLock);
            _arr = new AutoReaderRelease(_rwLock);
        }
 
        #endregion Constructors
 
        //------------------------------------------------------ 
        //
        //  Internal Properties 
        //
        //-----------------------------------------------------

        #region Internal Properties 

        internal IDisposable WriteLock 
        { 
            get
            { 
                _rwLock.AcquireWriterLock(Timeout.Infinite);
                return _awr;
            }
        } 

        internal IDisposable ReadLock 
        { 
            get
            { 
                _rwLock.AcquireReaderLock(Timeout.Infinite);
                return _arr;
            }
        } 

        #endregion Internal Properties 
 
        //------------------------------------------------------
        // 
        //  Private Fields
        //
        //------------------------------------------------------
 
        #region Private Fields
 
        private ReaderWriterLock _rwLock; 
        private AutoReaderRelease _arr;
        private AutoWriterRelease _awr; 

        #endregion Private Fields

        //----------------------------------------------------- 
        //
        //  Private Classes & Structs 
        // 
        //------------------------------------------------------
 
        #region Private Classes & Structs

        private struct AutoWriterRelease : IDisposable
        { 
            public AutoWriterRelease(ReaderWriterLock rwLock)
            { 
                _lock = rwLock; 
            }
 
            public void Dispose()
            {
                _lock.ReleaseWriterLock();
            } 

            private ReaderWriterLock _lock; 
        } 

        private struct AutoReaderRelease : IDisposable 
        {
            public AutoReaderRelease(ReaderWriterLock rwLock)
            {
                _lock = rwLock; 
            }
 
            public void Dispose() 
            {
                _lock.ReleaseReaderLock(); 
            }

            private ReaderWriterLock _lock;
        } 
        #endregion Private Classes
    } 
} 

 



// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//---------------------------------------------------------------------------- 
//
// 
//    Copyright (C) Microsoft Corporation.  All rights reserved.
//  
//
// 
// Description: 
// Wrapper that allows a ReaderWriterLock to work with C#'s using() clause
// 
// History:
//  07/23/2003 : BrendanM Ported to WCP
//
//--------------------------------------------------------------------------- 

 
using System; 
using System.Threading;
using MS.Internal.WindowsBase; 

namespace MS.Internal
{
    // Wrapper that allows a ReaderWriterLock to work with C#'s using() clause 
    [FriendAccessAllowed] // Built into Base, used by Core and Framework.
    internal class ReaderWriterLockWrapper 
    { 
        //-----------------------------------------------------
        // 
        //  Constructors
        //
        //-----------------------------------------------------
 
        #region Constructors
 
        internal ReaderWriterLockWrapper() 
        {
            _rwLock = new ReaderWriterLock(); 
            _awr = new AutoWriterRelease(_rwLock);
            _arr = new AutoReaderRelease(_rwLock);
        }
 
        #endregion Constructors
 
        //------------------------------------------------------ 
        //
        //  Internal Properties 
        //
        //-----------------------------------------------------

        #region Internal Properties 

        internal IDisposable WriteLock 
        { 
            get
            { 
                _rwLock.AcquireWriterLock(Timeout.Infinite);
                return _awr;
            }
        } 

        internal IDisposable ReadLock 
        { 
            get
            { 
                _rwLock.AcquireReaderLock(Timeout.Infinite);
                return _arr;
            }
        } 

        #endregion Internal Properties 
 
        //------------------------------------------------------
        // 
        //  Private Fields
        //
        //------------------------------------------------------
 
        #region Private Fields
 
        private ReaderWriterLock _rwLock; 
        private AutoReaderRelease _arr;
        private AutoWriterRelease _awr; 

        #endregion Private Fields

        //----------------------------------------------------- 
        //
        //  Private Classes & Structs 
        // 
        //------------------------------------------------------
 
        #region Private Classes & Structs

        private struct AutoWriterRelease : IDisposable
        { 
            public AutoWriterRelease(ReaderWriterLock rwLock)
            { 
                _lock = rwLock; 
            }
 
            public void Dispose()
            {
                _lock.ReleaseWriterLock();
            } 

            private ReaderWriterLock _lock; 
        } 

        private struct AutoReaderRelease : IDisposable 
        {
            public AutoReaderRelease(ReaderWriterLock rwLock)
            {
                _lock = rwLock; 
            }
 
            public void Dispose() 
            {
                _lock.ReleaseReaderLock(); 
            }

            private ReaderWriterLock _lock;
        } 
        #endregion Private Classes
    } 
} 

 



// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

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