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
- ObjectSecurity.cs
- ExtentCqlBlock.cs
- XamlSerializationHelper.cs
- SerializationAttributes.cs
- FixedSOMContainer.cs
- SqlInternalConnectionTds.cs
- XsltSettings.cs
- SizeConverter.cs
- CatalogPart.cs
- HijriCalendar.cs
- ClickablePoint.cs
- EncryptedPackage.cs
- Calendar.cs
- XMLDiffLoader.cs
- CodeNamespaceImport.cs
- Pkcs9Attribute.cs
- ParagraphVisual.cs
- ReadOnlyHierarchicalDataSourceView.cs
- CompiledQueryCacheEntry.cs
- RequiredAttributeAttribute.cs
- GlobalProxySelection.cs
- NonDualMessageSecurityOverHttpElement.cs
- RawStylusInputCustomData.cs
- TimeSpanValidatorAttribute.cs
- RouteValueDictionary.cs
- PropagatorResult.cs
- GlyphingCache.cs
- BinaryNode.cs
- ProxyElement.cs
- WindowsContainer.cs
- HttpNamespaceReservationInstallComponent.cs
- StyleSheetRefUrlEditor.cs
- SyndicationLink.cs
- ContextMenuAutomationPeer.cs
- CodePropertyReferenceExpression.cs
- OleServicesContext.cs
- ThreadAttributes.cs
- DataRelationCollection.cs
- ViewCellSlot.cs
- HttpCapabilitiesBase.cs
- GeometryDrawing.cs
- HttpServerProtocol.cs
- RuntimeIdentifierPropertyAttribute.cs
- DateTimePickerDesigner.cs
- KoreanLunisolarCalendar.cs
- NewArray.cs
- LogicalExpressionTypeConverter.cs
- ChannelServices.cs
- QueryExpr.cs
- XmlSecureResolver.cs
- SrgsOneOf.cs
- EditorServiceContext.cs
- GeometryModel3D.cs
- TextureBrush.cs
- MultipleViewProviderWrapper.cs
- TabItem.cs
- TableRow.cs
- Control.cs
- DictionaryBase.cs
- NullRuntimeConfig.cs
- MDIClient.cs
- StyleModeStack.cs
- WindowsToolbar.cs
- WebConfigManager.cs
- ListControl.cs
- MultiTouchSystemGestureLogic.cs
- UserUseLicenseDictionaryLoader.cs
- DataList.cs
- UshortList2.cs
- odbcmetadatafactory.cs
- Inline.cs
- Select.cs
- OperationCanceledException.cs
- CharacterHit.cs
- SingleAnimationUsingKeyFrames.cs
- MobileTemplatedControlDesigner.cs
- DataGridViewCellStyle.cs
- ProgressBarBrushConverter.cs
- CustomExpressionEventArgs.cs
- DataGridViewRowStateChangedEventArgs.cs
- ErrorFormatter.cs
- CompatibleIComparer.cs
- HashSetDebugView.cs
- ReferenceEqualityComparer.cs
- SqlConnectionStringBuilder.cs
- IApplicationTrustManager.cs
- CacheMemory.cs
- UnsafeNativeMethods.cs
- TextServicesCompartmentEventSink.cs
- CallbackValidatorAttribute.cs
- SponsorHelper.cs
- BaseCollection.cs
- TransformDescriptor.cs
- MILUtilities.cs
- ListBoxItemAutomationPeer.cs
- DesignerForm.cs
- Line.cs
- XmlReflectionImporter.cs
- CodeGroup.cs
- EncoderReplacementFallback.cs