Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / xsp / System / Web / Util / ReadWriteObjectLock.cs / 1 / ReadWriteObjectLock.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * ReadWriteObjectLock * * Copyright (c) 1998-1999, Microsoft Corporation * */ namespace System.Web.Util { using System.Runtime.Serialization.Formatters; using System.Threading; class ReadWriteObjectLock { // Assumption: // -1 = a writer has the lock // 0 = no one has the lock // >0 = number of readers using the lock private int _lock; internal ReadWriteObjectLock() { } internal virtual void AcquireRead() { lock(this) { while (_lock == -1) { try { Monitor.Wait(this); } catch (ThreadInterruptedException) { // Just keep looping } } _lock++; } } internal virtual void ReleaseRead() { lock(this) { Debug.Assert(_lock > 0); _lock--; if (_lock == 0) { Monitor.PulseAll(this); } } } internal virtual void AcquireWrite() { lock(this) { while (_lock != 0) { try { Monitor.Wait(this); } catch (ThreadInterruptedException) { // Just keep looping } } _lock = -1; } } internal virtual void ReleaseWrite() { lock(this) { Debug.Assert(_lock == -1); _lock = 0; Monitor.PulseAll(this); } } /* internal virtual void AssertReadLock() { #if DBG Debug.Assert(_lock > 0); #endif } internal virtual void AssertWriteLock() { #if DBG Debug.Assert(_lock == -1); #endif } */ } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * ReadWriteObjectLock * * Copyright (c) 1998-1999, Microsoft Corporation * */ namespace System.Web.Util { using System.Runtime.Serialization.Formatters; using System.Threading; class ReadWriteObjectLock { // Assumption: // -1 = a writer has the lock // 0 = no one has the lock // >0 = number of readers using the lock private int _lock; internal ReadWriteObjectLock() { } internal virtual void AcquireRead() { lock(this) { while (_lock == -1) { try { Monitor.Wait(this); } catch (ThreadInterruptedException) { // Just keep looping } } _lock++; } } internal virtual void ReleaseRead() { lock(this) { Debug.Assert(_lock > 0); _lock--; if (_lock == 0) { Monitor.PulseAll(this); } } } internal virtual void AcquireWrite() { lock(this) { while (_lock != 0) { try { Monitor.Wait(this); } catch (ThreadInterruptedException) { // Just keep looping } } _lock = -1; } } internal virtual void ReleaseWrite() { lock(this) { Debug.Assert(_lock == -1); _lock = 0; Monitor.PulseAll(this); } } /* internal virtual void AssertReadLock() { #if DBG Debug.Assert(_lock > 0); #endif } internal virtual void AssertWriteLock() { #if DBG Debug.Assert(_lock == -1); #endif } */ } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RegisteredHiddenField.cs
- MsmqMessage.cs
- DnsPermission.cs
- TransactionChannel.cs
- CodeTypeReferenceCollection.cs
- RoutedCommand.cs
- DBCSCodePageEncoding.cs
- TableCell.cs
- AccessDataSourceView.cs
- PagesSection.cs
- AutomationEvent.cs
- JoinQueryOperator.cs
- ZoomPercentageConverter.cs
- SingleTagSectionHandler.cs
- SourceFileBuildProvider.cs
- DrawingGroup.cs
- DynamicMethod.cs
- MessageBox.cs
- ResourceContainer.cs
- StylusTouchDevice.cs
- LineServicesRun.cs
- Symbol.cs
- FormViewDeletedEventArgs.cs
- SecUtil.cs
- HMAC.cs
- NavigateEvent.cs
- StoryFragments.cs
- SafeRightsManagementSessionHandle.cs
- SpellerError.cs
- SqlDataSourceEnumerator.cs
- Privilege.cs
- PackageRelationship.cs
- WindowsStatusBar.cs
- CodeTypeDelegate.cs
- AncestorChangedEventArgs.cs
- CodeTypeConstructor.cs
- OleDbRowUpdatedEvent.cs
- TraceContextEventArgs.cs
- SqlNotificationEventArgs.cs
- HttpServerVarsCollection.cs
- ExpressionBindingsDialog.cs
- CodeMemberProperty.cs
- CodeConstructor.cs
- ListBoxChrome.cs
- HtmlLiteralTextAdapter.cs
- MDIControlStrip.cs
- WebPartCatalogCloseVerb.cs
- RequestNavigateEventArgs.cs
- IgnoreSection.cs
- FontWeights.cs
- GenericPrincipal.cs
- WinFormsSecurity.cs
- VolatileEnlistmentState.cs
- CompositeCollectionView.cs
- CompensatableTransactionScopeActivity.cs
- NavigationProperty.cs
- PointConverter.cs
- CheckBoxStandardAdapter.cs
- SqlTriggerContext.cs
- ResXFileRef.cs
- XmlDataImplementation.cs
- BinHexDecoder.cs
- __Error.cs
- CategoryEditor.cs
- ResizeGrip.cs
- ActivityTypeDesigner.xaml.cs
- OneOfConst.cs
- DataErrorValidationRule.cs
- TraceLevelStore.cs
- XPathNavigator.cs
- CodeCatchClause.cs
- LinearQuaternionKeyFrame.cs
- HashHelper.cs
- ScriptResourceHandler.cs
- DateTime.cs
- DBDataPermission.cs
- IResourceProvider.cs
- BooleanConverter.cs
- ListViewInsertedEventArgs.cs
- IOException.cs
- XmlSchemaAttributeGroup.cs
- SmtpClient.cs
- ServiceOperationViewControl.cs
- ArrayItemReference.cs
- PropertyFilterAttribute.cs
- ChildrenQuery.cs
- StandardOleMarshalObject.cs
- DockPattern.cs
- DispatchOperationRuntime.cs
- Vertex.cs
- MessageBox.cs
- PreservationFileReader.cs
- MatrixUtil.cs
- FamilyMapCollection.cs
- ClientTargetSection.cs
- Transform3D.cs
- XamlTemplateSerializer.cs
- MouseCaptureWithinProperty.cs
- Globals.cs
- ToolboxBitmapAttribute.cs