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
- ToolStripItem.cs
- DataGridViewCellStyleEditor.cs
- ComponentResourceKey.cs
- PreviewPageInfo.cs
- CodePageEncoding.cs
- _SingleItemRequestCache.cs
- JsonQNameDataContract.cs
- EventLogger.cs
- xmlformatgeneratorstatics.cs
- ResourceBinder.cs
- EntityDataSourceView.cs
- FramingDecoders.cs
- Int32CAMarshaler.cs
- TableItemPattern.cs
- Line.cs
- Parameter.cs
- EventToken.cs
- ComPlusTypeLoader.cs
- SafeNativeMethodsMilCoreApi.cs
- FileUpload.cs
- WebUtil.cs
- DomNameTable.cs
- XPathNavigatorReader.cs
- ProtocolsConfiguration.cs
- DataContractAttribute.cs
- Drawing.cs
- FileChangesMonitor.cs
- xamlnodes.cs
- CoTaskMemHandle.cs
- HttpContextServiceHost.cs
- Component.cs
- HttpServerVarsCollection.cs
- DataGridViewSortCompareEventArgs.cs
- RadioButtonStandardAdapter.cs
- UpdatePanel.cs
- ViewGenResults.cs
- PowerModeChangedEventArgs.cs
- UmAlQuraCalendar.cs
- GrabHandleGlyph.cs
- RedirectionProxy.cs
- TemplateBamlTreeBuilder.cs
- KnownBoxes.cs
- AlgoModule.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- InvokeMethodActivityDesigner.cs
- AttachInfo.cs
- AnimationClockResource.cs
- ObjectQuery_EntitySqlExtensions.cs
- ToolStripButton.cs
- Literal.cs
- MetadataException.cs
- MetadataCollection.cs
- SqlProfileProvider.cs
- TransportManager.cs
- EditorPartDesigner.cs
- DataGridState.cs
- ReadOnlyCollection.cs
- WebDisplayNameAttribute.cs
- FormatterConverter.cs
- ToolboxItemWrapper.cs
- QueryContext.cs
- MimeXmlReflector.cs
- TextEditorTyping.cs
- Publisher.cs
- _NTAuthentication.cs
- QueryCacheEntry.cs
- DiscoveryClientDuplexChannel.cs
- OutputCache.cs
- BamlStream.cs
- AttributeCollection.cs
- Processor.cs
- ErrorWebPart.cs
- ExceptionHandler.cs
- DataTableReader.cs
- ScriptBehaviorDescriptor.cs
- AssemblyName.cs
- Viewport3DVisual.cs
- RepeaterItem.cs
- MediaEntryAttribute.cs
- CollectionViewGroupRoot.cs
- ResourceReferenceExpression.cs
- DataServiceQueryOfT.cs
- COM2ExtendedUITypeEditor.cs
- HttpHandlersSection.cs
- DBSchemaRow.cs
- XamlSerializer.cs
- DataGridViewElement.cs
- BulletedListDesigner.cs
- AddressHeaderCollection.cs
- OracleConnectionStringBuilder.cs
- BitmapEffectDrawing.cs
- ResourcePart.cs
- ApplicationInfo.cs
- WebPartAddingEventArgs.cs
- GPPOINTF.cs
- securitycriticaldata.cs
- TemplateParser.cs
- DbDataRecord.cs
- DataViewListener.cs
- DataViewSetting.cs