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

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- BypassElement.cs
- VariantWrapper.cs
- PresentationSource.cs
- DbTransaction.cs
- DTCTransactionManager.cs
- ExpanderAutomationPeer.cs
- MsmqTransportBindingElement.cs
- StreamWithDictionary.cs
- XmlSchemaSet.cs
- RunClient.cs
- SQLConvert.cs
- SqlDelegatedTransaction.cs
- RowUpdatedEventArgs.cs
- HttpInputStream.cs
- TypeExtension.cs
- WindowsListView.cs
- ProgressBarBrushConverter.cs
- X509Certificate2Collection.cs
- LogicalTreeHelper.cs
- ThicknessConverter.cs
- HttpListener.cs
- InternalConfirm.cs
- SendSecurityHeaderElement.cs
- QilChoice.cs
- Registry.cs
- ValidationError.cs
- AppSecurityManager.cs
- LinqExpressionNormalizer.cs
- ConfigurationHelpers.cs
- XsdBuildProvider.cs
- ViewKeyConstraint.cs
- MainMenu.cs
- DelegatingConfigHost.cs
- ProcessModelSection.cs
- Point3DKeyFrameCollection.cs
- TraceLog.cs
- XmlEncoding.cs
- DefaultTraceListener.cs
- VsPropertyGrid.cs
- XmlStreamStore.cs
- ValidationSummary.cs
- IResourceProvider.cs
- StringArrayConverter.cs
- RawStylusInputReport.cs
- SupportsPreviewControlAttribute.cs
- QueryAccessibilityHelpEvent.cs
- PackUriHelper.cs
- externdll.cs
- SafeIUnknown.cs
- ActivityTypeDesigner.xaml.cs
- DynamicHyperLink.cs
- MimeTypeAttribute.cs
- ConfigurationManager.cs
- ObjectDataSourceDisposingEventArgs.cs
- UserControlDocumentDesigner.cs
- NCryptNative.cs
- TileBrush.cs
- LookupBindingPropertiesAttribute.cs
- WebPartsPersonalization.cs
- CacheRequest.cs
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- Application.cs
- RightsManagementProvider.cs
- SubMenuStyle.cs
- PrimarySelectionAdorner.cs
- VectorCollectionConverter.cs
- MetadataException.cs
- ReflectionTypeLoadException.cs
- ResourceReferenceKeyNotFoundException.cs
- input.cs
- DelegateHelpers.cs
- HtmlShimManager.cs
- CachedPathData.cs
- RegisteredScript.cs
- SQLMoney.cs
- ConcurrentQueue.cs
- RepeaterItemCollection.cs
- TextEditorSelection.cs
- ParallelTimeline.cs
- WrappedKeySecurityTokenParameters.cs
- UpDownEvent.cs
- XPathNavigatorReader.cs
- _IPv6Address.cs
- FileDialogCustomPlacesCollection.cs
- DataGridState.cs
- MenuItemStyleCollection.cs
- DateTimeValueSerializerContext.cs
- PersistenceIOParticipant.cs
- SoapSchemaExporter.cs
- GridViewDeleteEventArgs.cs
- EntityCollection.cs
- WebBodyFormatMessageProperty.cs
- BaseDataBoundControl.cs
- ResourcesBuildProvider.cs
- AnnotationComponentManager.cs
- FixedSOMSemanticBox.cs
- ArrayTypeMismatchException.cs
- thaishape.cs
- XsdDuration.cs
- StringFunctions.cs