Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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. // //----------------------------------------------------------------------------- /* * 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- VerifyHashRequest.cs
- Pen.cs
- HttpCapabilitiesBase.cs
- BamlWriter.cs
- MonitoringDescriptionAttribute.cs
- IIS7UserPrincipal.cs
- SafeNativeMethods.cs
- FormsAuthenticationConfiguration.cs
- NoResizeHandleGlyph.cs
- HtmlTitle.cs
- PropertyMapper.cs
- LogExtent.cs
- MarginsConverter.cs
- CleanUpVirtualizedItemEventArgs.cs
- Constraint.cs
- WebConvert.cs
- OledbConnectionStringbuilder.cs
- XmlQueryContext.cs
- WindowsGraphics2.cs
- MenuEventArgs.cs
- XmlCDATASection.cs
- EntityConnectionStringBuilder.cs
- LoginStatusDesigner.cs
- ErrorHandlingAcceptor.cs
- EmptyElement.cs
- DataReaderContainer.cs
- XmlSchemaNotation.cs
- errorpatternmatcher.cs
- ChannelSinkStacks.cs
- CqlWriter.cs
- EncodingTable.cs
- _NegoStream.cs
- FixedHyperLink.cs
- TextServicesPropertyRanges.cs
- SecurityUtils.cs
- EnumerableCollectionView.cs
- COM2PropertyDescriptor.cs
- RestClientProxyHandler.cs
- ParagraphResult.cs
- dataprotectionpermission.cs
- AtomContentProperty.cs
- SmtpCommands.cs
- ILGen.cs
- DatatypeImplementation.cs
- RunClient.cs
- FixedElement.cs
- DataContractSerializer.cs
- HttpCachePolicy.cs
- ApplicationContext.cs
- DataServiceQueryOfT.cs
- NamespaceInfo.cs
- TargetParameterCountException.cs
- PeerEndPoint.cs
- Validator.cs
- TableCell.cs
- OperatorExpressions.cs
- HostProtectionPermission.cs
- CompatibleIComparer.cs
- ComboBoxAutomationPeer.cs
- BooleanExpr.cs
- InArgumentConverter.cs
- contentDescriptor.cs
- BamlReader.cs
- PublisherIdentityPermission.cs
- CodeAccessSecurityEngine.cs
- QueryCursorEventArgs.cs
- IDQuery.cs
- JumpPath.cs
- CodeFieldReferenceExpression.cs
- TextComposition.cs
- DataKeyCollection.cs
- ListViewVirtualItemsSelectionRangeChangedEvent.cs
- _DigestClient.cs
- InstanceLockedException.cs
- ValueSerializerAttribute.cs
- ScrollItemPattern.cs
- RegexCompilationInfo.cs
- XmlSchema.cs
- GeometryModel3D.cs
- OleDbParameter.cs
- DiffuseMaterial.cs
- FormsAuthenticationModule.cs
- DirectoryInfo.cs
- StateChangeEvent.cs
- SHA384Cng.cs
- CompositeDataBoundControl.cs
- wmiprovider.cs
- UserControlBuildProvider.cs
- SapiAttributeParser.cs
- AccessText.cs
- AnnotationResource.cs
- PhysicalOps.cs
- ClassDataContract.cs
- CompensateDesigner.cs
- XmlSchemaExporter.cs
- AndCondition.cs
- PropertyMap.cs
- RestHandler.cs
- BaseValidator.cs
- SelectingProviderEventArgs.cs