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
- ToolboxComponentsCreatedEventArgs.cs
- QueryOutputWriter.cs
- CodeAttributeArgumentCollection.cs
- GCHandleCookieTable.cs
- DataViewSettingCollection.cs
- SystemParameters.cs
- XNodeNavigator.cs
- TerminateSequenceResponse.cs
- TemplateField.cs
- SiteMap.cs
- shaperfactoryquerycachekey.cs
- RewritingPass.cs
- COM2TypeInfoProcessor.cs
- CodeCommentStatement.cs
- DbResourceAllocator.cs
- SerializationIncompleteException.cs
- StylusPointProperties.cs
- AsymmetricKeyExchangeFormatter.cs
- GridViewColumnHeaderAutomationPeer.cs
- Msmq.cs
- DataGridTextBoxColumn.cs
- DesignerProperties.cs
- EmbeddedMailObjectsCollection.cs
- __TransparentProxy.cs
- HttpListenerContext.cs
- DbBuffer.cs
- HashCodeCombiner.cs
- EventPropertyMap.cs
- MimeTypeMapper.cs
- SettingsBase.cs
- WindowsPrincipal.cs
- IncrementalReadDecoders.cs
- CompatibleComparer.cs
- ScrollableControl.cs
- InvalidChannelBindingException.cs
- SizeIndependentAnimationStorage.cs
- Point4DConverter.cs
- SolidColorBrush.cs
- DSACryptoServiceProvider.cs
- ByteRangeDownloader.cs
- HMACSHA256.cs
- BufferBuilder.cs
- RectangleF.cs
- Preprocessor.cs
- log.cs
- ImageAutomationPeer.cs
- PostBackOptions.cs
- Error.cs
- DockPattern.cs
- LocalIdKeyIdentifierClause.cs
- SeparatorAutomationPeer.cs
- BaseValidator.cs
- XhtmlTextWriter.cs
- TrackingRecord.cs
- TextChangedEventArgs.cs
- PropertyValueUIItem.cs
- CreatingCookieEventArgs.cs
- EntityDataSourceReferenceGroup.cs
- BinaryReader.cs
- TextContainer.cs
- HtmlEmptyTagControlBuilder.cs
- DataGridDesigner.cs
- WindowsListViewItemCheckBox.cs
- MenuItem.cs
- SetStoryboardSpeedRatio.cs
- FixedSOMImage.cs
- ScriptControlDescriptor.cs
- ColorConvertedBitmapExtension.cs
- Stacktrace.cs
- DataObjectMethodAttribute.cs
- ZipIOBlockManager.cs
- ContextMenuAutomationPeer.cs
- ProfileParameter.cs
- RevocationPoint.cs
- ComponentDispatcherThread.cs
- AdCreatedEventArgs.cs
- MaskedTextBoxDesignerActionList.cs
- XslCompiledTransform.cs
- AudioFormatConverter.cs
- PeerContact.cs
- AssociationSetMetadata.cs
- XmlQueryCardinality.cs
- DataPagerFieldCollection.cs
- BamlRecordHelper.cs
- Visual3DCollection.cs
- ApplicationDirectory.cs
- Propagator.cs
- WeakReadOnlyCollection.cs
- ImmutableObjectAttribute.cs
- ApplicationInfo.cs
- SvcMapFileLoader.cs
- BezierSegment.cs
- VisualCollection.cs
- XmlQuerySequence.cs
- DataGridLinkButton.cs
- SHA384Managed.cs
- SerializationException.cs
- AsymmetricSignatureDeformatter.cs
- PropertySegmentSerializer.cs
- AlternationConverter.cs