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
- TextEffectCollection.cs
- EdmComplexTypeAttribute.cs
- DynamicEndpoint.cs
- Properties.cs
- NullableDecimalAverageAggregationOperator.cs
- DropSource.cs
- AssemblyUtil.cs
- _Semaphore.cs
- HtmlInputButton.cs
- ThreadStaticAttribute.cs
- QilParameter.cs
- GeometryCollection.cs
- LinearQuaternionKeyFrame.cs
- HitTestResult.cs
- ListViewHitTestInfo.cs
- ConvertEvent.cs
- Transform3DCollection.cs
- FunctionQuery.cs
- ListViewCommandEventArgs.cs
- ParserStreamGeometryContext.cs
- SystemUnicastIPAddressInformation.cs
- PrinterResolution.cs
- OledbConnectionStringbuilder.cs
- DataSet.cs
- MetadataUtil.cs
- FixedSOMTextRun.cs
- SiteMapDataSourceView.cs
- GridViewEditEventArgs.cs
- wmiprovider.cs
- DependencyPropertyHelper.cs
- SingleStorage.cs
- RewritingPass.cs
- DynamicFilterExpression.cs
- ParagraphVisual.cs
- LicenseProviderAttribute.cs
- InvalidWMPVersionException.cs
- ExpressionBindingCollection.cs
- SequentialUshortCollection.cs
- AssociatedControlConverter.cs
- ModelItemDictionary.cs
- FlowLayoutSettings.cs
- ExtendedProperty.cs
- ExpressionBindingCollection.cs
- Quad.cs
- DataRelationCollection.cs
- LoadedOrUnloadedOperation.cs
- DocumentSequence.cs
- DrawListViewColumnHeaderEventArgs.cs
- OperationAbortedException.cs
- BrowserCapabilitiesFactoryBase.cs
- ExceptionNotification.cs
- PcmConverter.cs
- DataPointer.cs
- BindingSource.cs
- DBCommand.cs
- SettingsSection.cs
- XPathMultyIterator.cs
- ToolStripDropDownItem.cs
- Label.cs
- NativeBuffer.cs
- ResizeBehavior.cs
- WindowVisualStateTracker.cs
- EventLogWatcher.cs
- PriorityBindingExpression.cs
- HostingEnvironmentException.cs
- SectionInput.cs
- XMLDiffLoader.cs
- MaterialGroup.cs
- PerfCounters.cs
- Dispatcher.cs
- HostingEnvironmentSection.cs
- WebConfigurationHost.cs
- ExtensionQuery.cs
- ResXResourceWriter.cs
- SymmetricCryptoHandle.cs
- StringResourceManager.cs
- HtmlInputButton.cs
- HelpInfo.cs
- TransactionalPackage.cs
- ColorConvertedBitmap.cs
- TransactionTable.cs
- FindCompletedEventArgs.cs
- InvalidDataException.cs
- MonitoringDescriptionAttribute.cs
- SafeNativeMethods.cs
- Substitution.cs
- ToolStripItemDataObject.cs
- CertificateReferenceElement.cs
- DataServiceBehavior.cs
- SqlProfileProvider.cs
- SupportsEventValidationAttribute.cs
- OleAutBinder.cs
- FixedDSBuilder.cs
- EncryptedKey.cs
- Control.cs
- CatalogZoneBase.cs
- OleDbEnumerator.cs
- SqlTypeSystemProvider.cs
- CharacterString.cs
- ListViewSelectEventArgs.cs