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
- SelectionProcessor.cs
- CompositionTarget.cs
- ModelVisual3D.cs
- LocalizabilityAttribute.cs
- NavigationExpr.cs
- EventItfInfo.cs
- GPPOINT.cs
- DBSchemaTable.cs
- TimelineClockCollection.cs
- DataGridViewHitTestInfo.cs
- PromptBuilder.cs
- HttpAsyncResult.cs
- autovalidator.cs
- SizeChangedEventArgs.cs
- NavigationWindow.cs
- ConstNode.cs
- StretchValidation.cs
- ObjectListDesigner.cs
- StorageFunctionMapping.cs
- XmlLangPropertyAttribute.cs
- KeySpline.cs
- PageAsyncTaskManager.cs
- VectorConverter.cs
- MemoryMappedViewStream.cs
- ErrorTableItemStyle.cs
- SmtpReplyReader.cs
- SQLInt32.cs
- cookieexception.cs
- ArgumentNullException.cs
- CodeAttributeDeclaration.cs
- XmlRootAttribute.cs
- TextPatternIdentifiers.cs
- ShaderEffect.cs
- EditorZone.cs
- XhtmlBasicPhoneCallAdapter.cs
- QueryExecutionOption.cs
- autovalidator.cs
- WmfPlaceableFileHeader.cs
- EllipseGeometry.cs
- HttpCachePolicyWrapper.cs
- QilXmlReader.cs
- PropertySegmentSerializationProvider.cs
- Metadata.cs
- DependencySource.cs
- SqlServer2KCompatibilityCheck.cs
- ResourceBinder.cs
- KeyPressEvent.cs
- ConnectionManagementElementCollection.cs
- AssemblyAttributesGoHere.cs
- DoubleLinkList.cs
- WindowsScrollBarBits.cs
- WebPartsSection.cs
- ControlPropertyNameConverter.cs
- ColorTranslator.cs
- PackageDigitalSignature.cs
- TypographyProperties.cs
- ToolStripGripRenderEventArgs.cs
- UserPreferenceChangedEventArgs.cs
- WebServiceHost.cs
- FlowPanelDesigner.cs
- StrokeNodeData.cs
- XslAst.cs
- GPPOINT.cs
- ResourcePermissionBaseEntry.cs
- ServicePointManagerElement.cs
- XamlWriter.cs
- WorkflowRuntimeBehavior.cs
- ArrayElementGridEntry.cs
- InternalBase.cs
- NetSectionGroup.cs
- XmlException.cs
- LoadItemsEventArgs.cs
- WindowsIPAddress.cs
- DbgCompiler.cs
- UrlRoutingHandler.cs
- RNGCryptoServiceProvider.cs
- CheckBoxStandardAdapter.cs
- SqlConnectionFactory.cs
- XmlSchemaDatatype.cs
- PublisherIdentityPermission.cs
- ParentUndoUnit.cs
- RowToFieldTransformer.cs
- ProfileSettingsCollection.cs
- ClientTargetSection.cs
- hresults.cs
- BinHexDecoder.cs
- HMACSHA256.cs
- PipeSecurity.cs
- CommittableTransaction.cs
- StreamReader.cs
- IntegerValidatorAttribute.cs
- XmlElementAttributes.cs
- CalendarBlackoutDatesCollection.cs
- SoapReflector.cs
- ConfigurationManagerHelper.cs
- AutoGeneratedField.cs
- SimplePropertyEntry.cs
- ListViewUpdatedEventArgs.cs
- Help.cs
- HttpHandlersSection.cs