Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PersistNameAttribute.cs
- GeneralTransform3D.cs
- Rotation3DAnimationUsingKeyFrames.cs
- SelectionItemPatternIdentifiers.cs
- ControlTemplate.cs
- TextFormatterContext.cs
- XmlSchemaChoice.cs
- Polyline.cs
- LineProperties.cs
- ListViewDeletedEventArgs.cs
- BufferedGraphicsManager.cs
- StylusPointProperties.cs
- TemplateLookupAction.cs
- SectionInformation.cs
- BoolExpression.cs
- returneventsaver.cs
- Misc.cs
- PolicyManager.cs
- OpacityConverter.cs
- ProtocolReflector.cs
- DebuggerAttributes.cs
- SqlServices.cs
- SafeProcessHandle.cs
- MarkupExtensionParser.cs
- SHA1.cs
- CompilerState.cs
- CodeDirectionExpression.cs
- ParsedAttributeCollection.cs
- FacetValueContainer.cs
- InstanceHandle.cs
- OleDbPermission.cs
- MessageQueueEnumerator.cs
- XmlSchema.cs
- StylusDevice.cs
- FrameAutomationPeer.cs
- WmlImageAdapter.cs
- Number.cs
- FileResponseElement.cs
- ValidationHelper.cs
- WebPartRestoreVerb.cs
- Codec.cs
- FixedFlowMap.cs
- FocusManager.cs
- TextBox.cs
- DomNameTable.cs
- ChildChangedEventArgs.cs
- ListViewItem.cs
- HandlerFactoryCache.cs
- DataGridViewColumnTypePicker.cs
- DoubleLinkListEnumerator.cs
- SystemNetHelpers.cs
- Selection.cs
- RecordsAffectedEventArgs.cs
- glyphs.cs
- Trustee.cs
- ItemAutomationPeer.cs
- XmlLangPropertyAttribute.cs
- InvalidDataException.cs
- InsufficientMemoryException.cs
- XmlSerializerFaultFormatter.cs
- WebServiceEnumData.cs
- DependencyPropertyDescriptor.cs
- Repeater.cs
- IisTraceListener.cs
- DataKeyArray.cs
- CompilerResults.cs
- DataGridViewImageColumn.cs
- InkCollectionBehavior.cs
- ErrorReporting.cs
- HttpConfigurationContext.cs
- SchemaCollectionCompiler.cs
- SchemaCollectionCompiler.cs
- PersonalizationStateInfoCollection.cs
- XmlChildEnumerator.cs
- XmlSchemaDatatype.cs
- Utils.cs
- ImageAnimator.cs
- NamespaceList.cs
- ProcessHostConfigUtils.cs
- SizeChangedEventArgs.cs
- CompiledAction.cs
- ConstNode.cs
- Expander.cs
- ExtendedPropertyInfo.cs
- PolicyManager.cs
- DocumentSequence.cs
- SqlXml.cs
- ChangesetResponse.cs
- Ray3DHitTestResult.cs
- InteropBitmapSource.cs
- ChannelCacheDefaults.cs
- HashSetEqualityComparer.cs
- DrawingContextDrawingContextWalker.cs
- DrawingAttributes.cs
- ElementNotEnabledException.cs
- ResourceCategoryAttribute.cs
- Walker.cs
- DataGridViewAccessibleObject.cs
- SQLUtility.cs
- Point3DCollectionConverter.cs