Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / 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 } */ } }
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TimeZone.cs
- RangeBase.cs
- Comparer.cs
- Rijndael.cs
- CmsInterop.cs
- CompositeFontInfo.cs
- BatchParser.cs
- AppSettingsExpressionBuilder.cs
- TextElement.cs
- ParameterDataSourceExpression.cs
- PrintingPermission.cs
- NullableDecimalMinMaxAggregationOperator.cs
- XmlSchemaSimpleTypeUnion.cs
- MimeMapping.cs
- Pts.cs
- Line.cs
- LocalizableAttribute.cs
- PropertyRef.cs
- ViewEvent.cs
- PreloadedPackages.cs
- GeneralTransformCollection.cs
- Form.cs
- DecimalAnimationBase.cs
- Transform.cs
- PreviewPageInfo.cs
- FigureParaClient.cs
- WpfGeneratedKnownProperties.cs
- DependencyPropertyKey.cs
- _CommandStream.cs
- LocalizabilityAttribute.cs
- TypeDependencyAttribute.cs
- WebErrorHandler.cs
- SoapParser.cs
- UInt16.cs
- SpellerStatusTable.cs
- DispatcherBuilder.cs
- XmlReflectionImporter.cs
- UInt16Converter.cs
- WindowsScrollBar.cs
- FontStretches.cs
- QualifierSet.cs
- BaseValidator.cs
- MeasureItemEvent.cs
- ComponentDispatcherThread.cs
- CompositeCollection.cs
- LinqDataSourceHelper.cs
- CorrelationQueryBehavior.cs
- DataGridViewCellParsingEventArgs.cs
- Panel.cs
- ErrorWrapper.cs
- SecurityContextSecurityTokenAuthenticator.cs
- ProfileSettings.cs
- handlecollector.cs
- TemplateBindingExtension.cs
- CompilationUtil.cs
- Misc.cs
- WindowsRegion.cs
- DynamicControl.cs
- XpsFontSerializationService.cs
- DropDownList.cs
- ExpressionBinding.cs
- CompiledQuery.cs
- PrtCap_Base.cs
- categoryentry.cs
- TextServicesManager.cs
- ImageCodecInfoPrivate.cs
- CriticalHandle.cs
- AuthStoreRoleProvider.cs
- ExpressionNode.cs
- RootNamespaceAttribute.cs
- CurrencyWrapper.cs
- PriorityBindingExpression.cs
- SelectionRangeConverter.cs
- RuntimeArgumentHandle.cs
- XPathNodePointer.cs
- HttpSessionStateWrapper.cs
- WebPartEditorOkVerb.cs
- RootDesignerSerializerAttribute.cs
- Visitor.cs
- AdRotator.cs
- ConfigXmlReader.cs
- MachineSettingsSection.cs
- smtpconnection.cs
- FilterEventArgs.cs
- CacheMemory.cs
- QualifiedCellIdBoolean.cs
- FileController.cs
- LinqDataSourceContextEventArgs.cs
- HtmlControlPersistable.cs
- MarkupProperty.cs
- QilList.cs
- SortableBindingList.cs
- ProviderMetadata.cs
- MenuScrollingVisibilityConverter.cs
- DocumentApplicationState.cs
- AsymmetricSecurityProtocolFactory.cs
- PopOutPanel.cs
- RowTypePropertyElement.cs
- DataGridCommandEventArgs.cs
- ApplicationDirectory.cs