Code:
/ FX-1434 / FX-1434 / 1.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
- TemplateLookupAction.cs
- InheritedPropertyChangedEventArgs.cs
- DoubleConverter.cs
- FormatterServices.cs
- CompleteWizardStep.cs
- CqlErrorHelper.cs
- AutomationEvent.cs
- DefaultCommandConverter.cs
- safesecurityhelperavalon.cs
- TypedElement.cs
- ApplicationServicesHostFactory.cs
- ToolStripItemImageRenderEventArgs.cs
- NotifyCollectionChangedEventArgs.cs
- Int16.cs
- XpsS0ValidatingLoader.cs
- ImageBrush.cs
- UpDownBase.cs
- RowBinding.cs
- DataGridViewAdvancedBorderStyle.cs
- WindowsComboBox.cs
- figurelength.cs
- SafeHandles.cs
- RNGCryptoServiceProvider.cs
- IsolatedStoragePermission.cs
- ResourceDictionary.cs
- UnsafeNativeMethods.cs
- XmlProcessingInstruction.cs
- OdbcUtils.cs
- DesignerAutoFormatCollection.cs
- Baml2006ReaderSettings.cs
- GridViewSelectEventArgs.cs
- ThicknessAnimationUsingKeyFrames.cs
- OracleRowUpdatingEventArgs.cs
- SqlRowUpdatingEvent.cs
- Single.cs
- DataGridViewComboBoxColumn.cs
- HighContrastHelper.cs
- FunctionNode.cs
- CodeConditionStatement.cs
- EntityTypeEmitter.cs
- SplitContainerDesigner.cs
- ExcCanonicalXml.cs
- ArrayListCollectionBase.cs
- TranslateTransform3D.cs
- GenericWebPart.cs
- FixedPageProcessor.cs
- GeometryHitTestResult.cs
- LexicalChunk.cs
- UInt32Storage.cs
- HyperLink.cs
- PassportAuthenticationModule.cs
- DescendantQuery.cs
- DialogResultConverter.cs
- MDIWindowDialog.cs
- RelationshipWrapper.cs
- PeerNodeAddress.cs
- BindToObject.cs
- ToolStripOverflow.cs
- unsafenativemethodsother.cs
- ListViewDesigner.cs
- TypeConverterHelper.cs
- SecurityUniqueId.cs
- SubstitutionResponseElement.cs
- DataGridViewRowCancelEventArgs.cs
- SequenceQuery.cs
- EventWaitHandleSecurity.cs
- MsmqInputSessionChannelListener.cs
- log.cs
- TagPrefixAttribute.cs
- ElementAtQueryOperator.cs
- HtmlInputButton.cs
- PenThreadPool.cs
- SymmetricAlgorithm.cs
- Lazy.cs
- DataSourceNameHandler.cs
- Process.cs
- PathStreamGeometryContext.cs
- ProviderIncompatibleException.cs
- MsmqChannelListenerBase.cs
- CachedCompositeFamily.cs
- HttpHandlersSection.cs
- BitArray.cs
- DoubleLinkList.cs
- StringBlob.cs
- RelationshipSet.cs
- XamlInt32CollectionSerializer.cs
- SqlUnionizer.cs
- CaseInsensitiveOrdinalStringComparer.cs
- XmlCharacterData.cs
- HttpHandlerAction.cs
- Brush.cs
- PngBitmapDecoder.cs
- DesignerSerializationVisibilityAttribute.cs
- CookieParameter.cs
- ContractsBCL.cs
- x509utils.cs
- ToolTipService.cs
- NativeMethods.cs
- NominalTypeEliminator.cs
- CrossSiteScriptingValidation.cs