Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- OrderPreservingPipeliningSpoolingTask.cs
- QilIterator.cs
- AnnotationComponentChooser.cs
- TextEditorSpelling.cs
- StringComparer.cs
- EncoderParameters.cs
- XpsSerializerFactory.cs
- BamlRecordReader.cs
- SqlUnionizer.cs
- ConnectionStringsExpressionBuilder.cs
- BooleanExpr.cs
- Token.cs
- DBCSCodePageEncoding.cs
- DbConnectionFactory.cs
- ModelVisual3D.cs
- WebPartCancelEventArgs.cs
- LineGeometry.cs
- Pointer.cs
- ReservationCollection.cs
- QuotedPrintableStream.cs
- Processor.cs
- EntityViewGenerationConstants.cs
- JournalEntry.cs
- CodeDefaultValueExpression.cs
- PropertyCondition.cs
- StateRuntime.cs
- VersionPair.cs
- RuntimeEnvironment.cs
- TaskHelper.cs
- EncoderFallback.cs
- XhtmlBasicCommandAdapter.cs
- PlainXmlSerializer.cs
- OneOfConst.cs
- WebConfigurationHostFileChange.cs
- CheckBoxAutomationPeer.cs
- NumericUpDownAccelerationCollection.cs
- MouseButton.cs
- DetailsViewPagerRow.cs
- LinqDataSourceHelper.cs
- HandlerBase.cs
- HostingEnvironmentSection.cs
- Path.cs
- RegistryKey.cs
- Rect3D.cs
- PropertyRef.cs
- DefaultBindingPropertyAttribute.cs
- DesignerDataParameter.cs
- EntityParameter.cs
- ModulesEntry.cs
- FormsAuthenticationUserCollection.cs
- PersistChildrenAttribute.cs
- PrintPreviewGraphics.cs
- CardSpacePolicyElement.cs
- OdbcConnectionStringbuilder.cs
- SqlSelectStatement.cs
- CommandLibraryHelper.cs
- CharacterBuffer.cs
- DomainUpDown.cs
- XmlArrayItemAttribute.cs
- RMEnrollmentPage3.cs
- Rotation3DAnimationBase.cs
- DPAPIProtectedConfigurationProvider.cs
- RecipientServiceModelSecurityTokenRequirement.cs
- WebPartHeaderCloseVerb.cs
- HuffmanTree.cs
- StringArrayConverter.cs
- ChannelServices.cs
- HtmlAnchor.cs
- WindowsGraphicsWrapper.cs
- DefaultObjectMappingItemCollection.cs
- CurrentChangingEventArgs.cs
- DocumentGrid.cs
- Matrix3D.cs
- HelloOperation11AsyncResult.cs
- BinaryParser.cs
- EncoderReplacementFallback.cs
- ThrowOnMultipleAssignment.cs
- KeyMatchBuilder.cs
- EncodingInfo.cs
- UIPropertyMetadata.cs
- SessionStateContainer.cs
- RedistVersionInfo.cs
- BamlLocalizabilityResolver.cs
- ActivityUtilities.cs
- GridPatternIdentifiers.cs
- CatalogZoneBase.cs
- PKCS1MaskGenerationMethod.cs
- MetadataSerializer.cs
- DataTableClearEvent.cs
- RectAnimationUsingKeyFrames.cs
- HttpsHostedTransportConfiguration.cs
- XmlWriter.cs
- LocatorPart.cs
- ComPlusTypeValidator.cs
- BrushConverter.cs
- SelectorAutomationPeer.cs
- XmlChildNodes.cs
- StringUtil.cs
- Error.cs
- PropertyManager.cs