Code:
/ DotNET / DotNET / 8.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
- GeometryCombineModeValidation.cs
- ProxyHwnd.cs
- ExpressionBinding.cs
- ImageListImage.cs
- HelpEvent.cs
- SystemTcpStatistics.cs
- ExceptionUtil.cs
- Scalars.cs
- AssociatedControlConverter.cs
- DataMemberConverter.cs
- SerializationInfo.cs
- PenContext.cs
- Solver.cs
- ITreeGenerator.cs
- CssClassPropertyAttribute.cs
- BaseTypeViewSchema.cs
- WindowsEditBoxRange.cs
- ParentUndoUnit.cs
- CodeRemoveEventStatement.cs
- WebPartConnectionsCloseVerb.cs
- MembershipPasswordException.cs
- WindowsClientCredential.cs
- ElementAtQueryOperator.cs
- RowBinding.cs
- PolyLineSegment.cs
- EventProviderWriter.cs
- TitleStyle.cs
- MouseGestureConverter.cs
- Int16AnimationBase.cs
- DiagnosticsConfiguration.cs
- DelegateSerializationHolder.cs
- ClientOperation.cs
- Win32KeyboardDevice.cs
- UniqueConstraint.cs
- ConfigViewGenerator.cs
- DataSvcMapFileSerializer.cs
- Variable.cs
- JsonReader.cs
- SqlAliasesReferenced.cs
- EnumType.cs
- TimerElapsedEvenArgs.cs
- ActiveXHost.cs
- Pen.cs
- OrderByQueryOptionExpression.cs
- WebServiceMethodData.cs
- FunctionParameter.cs
- SoapEnvelopeProcessingElement.cs
- TextOutput.cs
- XmlException.cs
- CodeAccessPermission.cs
- CompositeFontInfo.cs
- XPathMultyIterator.cs
- FrugalMap.cs
- WinFormsSecurity.cs
- DataControlButton.cs
- CultureMapper.cs
- Identity.cs
- Faults.cs
- VScrollBar.cs
- PipelineModuleStepContainer.cs
- Baml2006SchemaContext.cs
- IWorkflowDebuggerService.cs
- NativeMethods.cs
- CodeDOMUtility.cs
- __TransparentProxy.cs
- AspNetSynchronizationContext.cs
- CompilerGeneratedAttribute.cs
- UriTemplateTrieLocation.cs
- QueryPageSettingsEventArgs.cs
- BitmapFrame.cs
- ExceptionHandlerDesigner.cs
- XmlReflectionMember.cs
- IdentityVerifier.cs
- InternalControlCollection.cs
- GlobalProxySelection.cs
- SchemaObjectWriter.cs
- IisTraceWebEventProvider.cs
- WebDescriptionAttribute.cs
- ClientBuildManager.cs
- GiveFeedbackEvent.cs
- CodeNamespaceCollection.cs
- XmlNodeList.cs
- NetDataContractSerializer.cs
- WebExceptionStatus.cs
- MediaSystem.cs
- TextPointerBase.cs
- ParserStreamGeometryContext.cs
- DoubleLink.cs
- grammarelement.cs
- XmlArrayItemAttribute.cs
- WindowsTab.cs
- CodeEntryPointMethod.cs
- FixedStringLookup.cs
- PeerCustomResolverSettings.cs
- XmlNodeList.cs
- WinInet.cs
- RadioButtonDesigner.cs
- ProxyElement.cs
- GeneralTransform3DTo2D.cs
- WindowsContainer.cs