Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ByteRangeDownloader.cs
- ErrorView.xaml.cs
- RootDesignerSerializerAttribute.cs
- DataSourceCache.cs
- Sql8ExpressionRewriter.cs
- WebSysDescriptionAttribute.cs
- ConfigXmlText.cs
- WebBrowserPermission.cs
- SafeSecurityHelper.cs
- ShapingEngine.cs
- TextDecorationLocationValidation.cs
- ValidatorCompatibilityHelper.cs
- TextEditorSpelling.cs
- WebReferenceOptions.cs
- CompilationRelaxations.cs
- MenuItemStyle.cs
- TableCell.cs
- ListViewItem.cs
- MaterialGroup.cs
- ReferenceEqualityComparer.cs
- ParsedAttributeCollection.cs
- CqlGenerator.cs
- PersonalizableTypeEntry.cs
- UnsupportedPolicyOptionsException.cs
- XmlSchemaExternal.cs
- XmlSchemaException.cs
- CompilationUtil.cs
- Group.cs
- StatusBarPanel.cs
- VisualBrush.cs
- XmlMapping.cs
- shaperfactoryquerycachekey.cs
- ArithmeticException.cs
- StateMachineSubscriptionManager.cs
- SqlTypeSystemProvider.cs
- PointCollection.cs
- TextBoxBase.cs
- Matrix.cs
- HashAlgorithm.cs
- IntSecurity.cs
- InstanceContextManager.cs
- RelationshipManager.cs
- BufferedGraphicsContext.cs
- FieldNameLookup.cs
- _HeaderInfoTable.cs
- ToolboxCategory.cs
- ProfileBuildProvider.cs
- StyleTypedPropertyAttribute.cs
- ReverseInheritProperty.cs
- ColorBlend.cs
- CacheChildrenQuery.cs
- MLangCodePageEncoding.cs
- UpdateCompiler.cs
- BamlRecordWriter.cs
- EntityParameter.cs
- FixedSOMTableRow.cs
- CellTreeNode.cs
- MetafileHeaderEmf.cs
- ArrayHelper.cs
- Rotation3DAnimation.cs
- Pens.cs
- ApplyTemplatesAction.cs
- ProcessThreadCollection.cs
- _AutoWebProxyScriptWrapper.cs
- SmtpTransport.cs
- ReadOnlyHierarchicalDataSource.cs
- CodeRemoveEventStatement.cs
- ClientFormsAuthenticationMembershipProvider.cs
- TextEditorTables.cs
- ClientApiGenerator.cs
- ReadOnlyAttribute.cs
- EntityDataSourceEntityTypeFilterItem.cs
- MLangCodePageEncoding.cs
- Hyperlink.cs
- XmlChildNodes.cs
- XomlDesignerLoader.cs
- CompiledWorkflowDefinitionContext.cs
- TrackingMemoryStream.cs
- TypedTableHandler.cs
- SamlAttribute.cs
- RadioButtonList.cs
- SecurityElement.cs
- PenContexts.cs
- TransportSecurityProtocol.cs
- IdentityValidationException.cs
- ModelTreeEnumerator.cs
- AttributeCollection.cs
- FixedFindEngine.cs
- ListViewItem.cs
- AnimatedTypeHelpers.cs
- PaintEvent.cs
- GeneralTransform3DTo2D.cs
- SqlDataSourceStatusEventArgs.cs
- ComponentChangedEvent.cs
- SystemIPGlobalProperties.cs
- DataServiceConfiguration.cs
- ConnectionProviderAttribute.cs
- HwndAppCommandInputProvider.cs
- TableLayout.cs
- OneOf.cs