Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / Util / ReadWriteObjectLock.cs / 1305376 / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CookielessHelper.cs
- PointHitTestResult.cs
- EmptyControlCollection.cs
- OperatingSystem.cs
- CodeArgumentReferenceExpression.cs
- BitmapData.cs
- FunctionQuery.cs
- BidPrivateBase.cs
- COM2IDispatchConverter.cs
- Focus.cs
- ToolTipService.cs
- LogLogRecord.cs
- CfgArc.cs
- XmlSiteMapProvider.cs
- ImageFormat.cs
- BinaryFormatterSinks.cs
- ConstructorNeedsTagAttribute.cs
- ToolStripMenuItemDesigner.cs
- XNodeNavigator.cs
- CallContext.cs
- FullTrustAssemblyCollection.cs
- MetadataItem.cs
- SystemIPv4InterfaceProperties.cs
- WebMessageEncodingBindingElement.cs
- Label.cs
- SamlConstants.cs
- DesignerSerializationVisibilityAttribute.cs
- TextFragmentEngine.cs
- CodeGen.cs
- SelectorItemAutomationPeer.cs
- FontCollection.cs
- WebZone.cs
- ContractListAdapter.cs
- FileSystemInfo.cs
- DataGridAutoFormat.cs
- EnumConverter.cs
- Visual.cs
- CurrentChangingEventManager.cs
- DefinitionBase.cs
- ContentPlaceHolderDesigner.cs
- GifBitmapEncoder.cs
- BinaryQueryOperator.cs
- KeyValuePairs.cs
- TextParagraphProperties.cs
- MD5.cs
- ValueOfAction.cs
- DurableInstancingOptions.cs
- XmlCompatibilityReader.cs
- sqlpipe.cs
- PeerObject.cs
- NullableBoolConverter.cs
- GroupBox.cs
- BrowsableAttribute.cs
- _SSPISessionCache.cs
- InputDevice.cs
- DesignerValidationSummaryAdapter.cs
- SystemIPInterfaceStatistics.cs
- ModelTreeEnumerator.cs
- GridSplitterAutomationPeer.cs
- HwndMouseInputProvider.cs
- XPathSelfQuery.cs
- TimeZone.cs
- TraceFilter.cs
- Int32AnimationUsingKeyFrames.cs
- KnownColorTable.cs
- EntityDataSourceMemberPath.cs
- StringSorter.cs
- EndPoint.cs
- SignatureToken.cs
- GridViewUpdateEventArgs.cs
- StandardCommands.cs
- XmlUtilWriter.cs
- ToolStripOverflow.cs
- GeometryValueSerializer.cs
- ReadOnlyTernaryTree.cs
- ThreadStateException.cs
- CodeVariableReferenceExpression.cs
- HtmlEmptyTagControlBuilder.cs
- IntAverageAggregationOperator.cs
- TextContainerChangeEventArgs.cs
- HostedHttpRequestAsyncResult.cs
- PointHitTestParameters.cs
- UnsafeNativeMethodsPenimc.cs
- PolygonHotSpot.cs
- DoubleAnimationUsingPath.cs
- UnionCodeGroup.cs
- SqlUserDefinedTypeAttribute.cs
- PointAnimationUsingPath.cs
- XmlQueryType.cs
- TextEditor.cs
- HttpDebugHandler.cs
- COM2IPerPropertyBrowsingHandler.cs
- X509Chain.cs
- FormViewUpdateEventArgs.cs
- MetadataItemSerializer.cs
- WinEventQueueItem.cs
- DialogBaseForm.cs
- SubclassTypeValidatorAttribute.cs
- DataSourceSerializationException.cs
- _DomainName.cs