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
- DocumentGrid.cs
- RequestStatusBarUpdateEventArgs.cs
- MetadataItemSerializer.cs
- CssTextWriter.cs
- DataGridRowHeaderAutomationPeer.cs
- DataGrid.cs
- MimeMapping.cs
- UnionExpr.cs
- QuadTree.cs
- ObjectDataSourceFilteringEventArgs.cs
- MissingSatelliteAssemblyException.cs
- SiteMap.cs
- CompilerTypeWithParams.cs
- XmlDocumentFragment.cs
- Privilege.cs
- BaseDataBoundControl.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- ExtendedProtectionPolicyTypeConverter.cs
- StorageMappingItemCollection.cs
- HMACMD5.cs
- DispatcherEventArgs.cs
- UnsafePeerToPeerMethods.cs
- UserNameSecurityTokenProvider.cs
- DataSetFieldSchema.cs
- SingleStorage.cs
- TypeReference.cs
- SchemaInfo.cs
- LambdaValue.cs
- CatalogPart.cs
- Synchronization.cs
- SignatureHelper.cs
- CreateParams.cs
- ProxyManager.cs
- CodeVariableReferenceExpression.cs
- ApplicationServiceHelper.cs
- UpDownBase.cs
- WmlValidationSummaryAdapter.cs
- Keywords.cs
- DataSetUtil.cs
- CachedPathData.cs
- PropertyRecord.cs
- HttpHeaderCollection.cs
- InfoCardBaseException.cs
- AsnEncodedData.cs
- SendKeys.cs
- URIFormatException.cs
- TemplatedAdorner.cs
- XsdCachingReader.cs
- StickyNoteAnnotations.cs
- sqlnorm.cs
- RoutedUICommand.cs
- ActivityInstanceReference.cs
- RestHandler.cs
- XmlDataDocument.cs
- SystemIPv4InterfaceProperties.cs
- MsmqIntegrationSecurityMode.cs
- BCryptSafeHandles.cs
- AssociationTypeEmitter.cs
- SupportsEventValidationAttribute.cs
- XmlSchemaInclude.cs
- PerformanceCounter.cs
- Attributes.cs
- CaseInsensitiveHashCodeProvider.cs
- TextClipboardData.cs
- GeometryHitTestParameters.cs
- DictionaryBase.cs
- DeviceContexts.cs
- ContractsBCL.cs
- BulletChrome.cs
- XmlNodeList.cs
- DeferredReference.cs
- PointLightBase.cs
- LocalizationCodeDomSerializer.cs
- GeometryHitTestParameters.cs
- BooleanAnimationUsingKeyFrames.cs
- CompiledAction.cs
- ChangesetResponse.cs
- TypeDescriptor.cs
- XmlAnyAttributeAttribute.cs
- DescendantBaseQuery.cs
- StreamReader.cs
- DbConnectionPoolGroupProviderInfo.cs
- MaskInputRejectedEventArgs.cs
- RayMeshGeometry3DHitTestResult.cs
- InvalidComObjectException.cs
- ContentHostHelper.cs
- LabelTarget.cs
- HandleRef.cs
- CacheMemory.cs
- GifBitmapDecoder.cs
- HttpEncoderUtility.cs
- GetLastErrorDetailsRequest.cs
- EventEntry.cs
- SupportingTokenProviderSpecification.cs
- FormParameter.cs
- ClickablePoint.cs
- PrimitiveType.cs
- DataListItemCollection.cs
- QueryReaderSettings.cs
- DocumentSchemaValidator.cs