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

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ContentType.cs
- Style.cs
- MenuAutoFormat.cs
- XmlDocumentFragment.cs
- PtsCache.cs
- MessageAction.cs
- CmsInterop.cs
- sqlmetadatafactory.cs
- ClientCultureInfo.cs
- Mappings.cs
- UTF8Encoding.cs
- ServiceMetadataPublishingElement.cs
- TabPanel.cs
- DataGridRow.cs
- WindowsScrollBar.cs
- SingleStorage.cs
- TabPage.cs
- EditorBrowsableAttribute.cs
- PageCache.cs
- FrameworkPropertyMetadata.cs
- MarkupWriter.cs
- DataTableReaderListener.cs
- AppDomainManager.cs
- UriScheme.cs
- NamespaceQuery.cs
- DataContractSerializerElement.cs
- HtmlHistory.cs
- Terminate.cs
- FixedPageStructure.cs
- ParameterToken.cs
- Pointer.cs
- XmlNodeReader.cs
- ThicknessAnimationBase.cs
- ExtensionFile.cs
- PropertyChangedEventArgs.cs
- Matrix.cs
- JsonGlobals.cs
- DataGridViewRowHeaderCell.cs
- HandlerFactoryWrapper.cs
- ListBindingConverter.cs
- CompiledIdentityConstraint.cs
- TextEffectCollection.cs
- CompositeFontInfo.cs
- EntityContainerAssociationSetEnd.cs
- SubMenuStyle.cs
- BookmarkTable.cs
- GPPOINTF.cs
- latinshape.cs
- ManagementOperationWatcher.cs
- ItemCollection.cs
- SchemaElementLookUpTableEnumerator.cs
- FromRequest.cs
- BooleanStorage.cs
- TableLayoutPanelCodeDomSerializer.cs
- _OSSOCK.cs
- ListViewInsertEventArgs.cs
- BackgroundWorker.cs
- ApplicationFileParser.cs
- WebHeaderCollection.cs
- arabicshape.cs
- ListViewItem.cs
- ELinqQueryState.cs
- XmlSchemaSimpleContent.cs
- InstanceNotFoundException.cs
- TableCell.cs
- CFGGrammar.cs
- CaseStatementProjectedSlot.cs
- ConfigurationManagerHelper.cs
- unsafeIndexingFilterStream.cs
- AsnEncodedData.cs
- MatrixCamera.cs
- WindowsFormsSectionHandler.cs
- ByeOperationAsyncResult.cs
- AmbiguousMatchException.cs
- InheritanceUI.cs
- UserValidatedEventArgs.cs
- DecoratedNameAttribute.cs
- URIFormatException.cs
- TextBoxBase.cs
- TrustManagerMoreInformation.cs
- DataControlPagerLinkButton.cs
- HtmlUtf8RawTextWriter.cs
- TrustLevel.cs
- AudienceUriMode.cs
- AmbientLight.cs
- MergePropertyDescriptor.cs
- XmlIgnoreAttribute.cs
- InvokeGenerator.cs
- GridLength.cs
- GridViewCommandEventArgs.cs
- DebugView.cs
- TrackingProfileDeserializationException.cs
- InputReferenceExpression.cs
- ActivityStateQuery.cs
- BindingExpression.cs
- TableCell.cs
- SrgsRule.cs
- HMACSHA384.cs
- Ticks.cs
- PanelStyle.cs