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
- MaterialGroup.cs
- ObjectDataSource.cs
- SqlDataReaderSmi.cs
- DataGridViewTopRowAccessibleObject.cs
- LineVisual.cs
- NameTable.cs
- RunInstallerAttribute.cs
- XPathSelfQuery.cs
- WebPartRestoreVerb.cs
- QilTypeChecker.cs
- SqlGatherProducedAliases.cs
- BitVector32.cs
- DataViewSetting.cs
- WindowsGraphicsWrapper.cs
- EventLogHandle.cs
- PathGradientBrush.cs
- DrawingContextDrawingContextWalker.cs
- ListControlConvertEventArgs.cs
- StylusPointPropertyInfo.cs
- HelpKeywordAttribute.cs
- PackWebRequest.cs
- DataContractSerializerOperationFormatter.cs
- ContentPlaceHolder.cs
- BufferedReadStream.cs
- XamlReaderHelper.cs
- NamedPipeActivation.cs
- XmlTextReaderImplHelpers.cs
- HtmlElement.cs
- PointIndependentAnimationStorage.cs
- PagerStyle.cs
- ObjectDataSourceDisposingEventArgs.cs
- BaseValidator.cs
- TransformerInfoCollection.cs
- IndexedEnumerable.cs
- GregorianCalendarHelper.cs
- IDispatchConstantAttribute.cs
- SpinLock.cs
- ConfigXmlElement.cs
- TextBoxView.cs
- Focus.cs
- TransactionTraceIdentifier.cs
- BamlLocalizer.cs
- IsolatedStorageFilePermission.cs
- CollectionExtensions.cs
- ToolTip.cs
- RegisteredArrayDeclaration.cs
- GridViewSelectEventArgs.cs
- PersonalizationStateInfoCollection.cs
- GeneralTransform3DGroup.cs
- MsmqActivation.cs
- IndicShape.cs
- ValidationHelper.cs
- WebConfigurationHost.cs
- COM2Enum.cs
- ASCIIEncoding.cs
- PeerApplicationLaunchInfo.cs
- StructuredCompositeActivityDesigner.cs
- XmlCharCheckingWriter.cs
- IxmlLineInfo.cs
- LabelLiteral.cs
- ServiceOperationInvoker.cs
- ResourceKey.cs
- TableLayoutColumnStyleCollection.cs
- SmtpFailedRecipientException.cs
- EncoderBestFitFallback.cs
- XamlFigureLengthSerializer.cs
- WebProxyScriptElement.cs
- EventData.cs
- Baml2006SchemaContext.cs
- InsufficientMemoryException.cs
- IgnoreFileBuildProvider.cs
- BaseProcessor.cs
- HatchBrush.cs
- HtmlImage.cs
- Errors.cs
- TextRangeAdaptor.cs
- IArgumentProvider.cs
- SimpleWorkerRequest.cs
- ActivationServices.cs
- localization.cs
- NamedObject.cs
- XmlValueConverter.cs
- Win32.cs
- JavaScriptSerializer.cs
- ContractValidationHelper.cs
- DeclarativeCatalogPart.cs
- ButtonPopupAdapter.cs
- ToolstripProfessionalRenderer.cs
- ResourceSet.cs
- PointLightBase.cs
- ProviderUtil.cs
- DataDocumentXPathNavigator.cs
- PassportPrincipal.cs
- Transform3D.cs
- ExtendedProtectionPolicyElement.cs
- StringArrayConverter.cs
- SHA256.cs
- Token.cs
- EntityObject.cs
- SetStateEventArgs.cs