Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Shared / MS / Internal / ReaderWriterLockWrapper.cs / 1 / 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
- MailAddressCollection.cs
- BuildProvider.cs
- XmlLinkedNode.cs
- StringBlob.cs
- SafeThreadHandle.cs
- storepermissionattribute.cs
- HttpApplicationStateWrapper.cs
- PrintController.cs
- ACE.cs
- PiiTraceSource.cs
- TagMapInfo.cs
- HostingEnvironmentSection.cs
- CaseExpr.cs
- ContentHostHelper.cs
- AudioBase.cs
- DataGridItemCollection.cs
- ResourceDescriptionAttribute.cs
- ElementMarkupObject.cs
- CellTreeNode.cs
- CssTextWriter.cs
- IResourceProvider.cs
- RecognizedAudio.cs
- LinkArea.cs
- ConnectionInterfaceCollection.cs
- ButtonFieldBase.cs
- DataSpaceManager.cs
- SafeReadContext.cs
- DataGridViewUtilities.cs
- ComponentDispatcher.cs
- DesignerActionUI.cs
- DecimalConverter.cs
- BasicViewGenerator.cs
- QueueProcessor.cs
- SortQuery.cs
- WebServicesSection.cs
- XhtmlBasicLabelAdapter.cs
- QuaternionRotation3D.cs
- DataGridViewComboBoxCell.cs
- RootProfilePropertySettingsCollection.cs
- DataGridViewCellConverter.cs
- CopyAction.cs
- TextParaLineResult.cs
- Mutex.cs
- SmiRequestExecutor.cs
- ServiceRouteHandler.cs
- RemoteCryptoSignHashRequest.cs
- ImportedNamespaceContextItem.cs
- ParserExtension.cs
- ContentDisposition.cs
- _TransmitFileOverlappedAsyncResult.cs
- AppLevelCompilationSectionCache.cs
- ScriptControl.cs
- SequentialUshortCollection.cs
- ConnectionModeReader.cs
- TextEmbeddedObject.cs
- HideDisabledControlAdapter.cs
- PointKeyFrameCollection.cs
- XmlSchemaExporter.cs
- TypefaceCollection.cs
- SystemTcpConnection.cs
- SingleBodyParameterMessageFormatter.cs
- PrintDialogDesigner.cs
- UICuesEvent.cs
- TableSectionStyle.cs
- MarkupCompilePass1.cs
- XsltCompileContext.cs
- TextReader.cs
- DataSourceGeneratorException.cs
- x509utils.cs
- CanonicalFontFamilyReference.cs
- PairComparer.cs
- CharacterHit.cs
- SqlWorkflowPersistenceService.cs
- ModelPerspective.cs
- MessageEncodingBindingElementImporter.cs
- Bidi.cs
- ADConnectionHelper.cs
- RotationValidation.cs
- ConnectionStringsSection.cs
- ProfileGroupSettings.cs
- TableLayout.cs
- MethodBuilderInstantiation.cs
- SoapException.cs
- XmlImplementation.cs
- Odbc32.cs
- TableColumnCollectionInternal.cs
- ImageSourceTypeConverter.cs
- FlowDocumentReaderAutomationPeer.cs
- DeferredBinaryDeserializerExtension.cs
- SslStream.cs
- ReceiveCompletedEventArgs.cs
- WindowsRebar.cs
- TextTreeTextNode.cs
- GetResponse.cs
- ToggleButton.cs
- Span.cs
- MembershipUser.cs
- DBCSCodePageEncoding.cs
- Font.cs
- SerializationException.cs