Code:
/ DotNET / DotNET / 8.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
- DesignerSelectionListAdapter.cs
- ExpressionBindingsDialog.cs
- TileModeValidation.cs
- WindowsListViewGroup.cs
- Item.cs
- FixUp.cs
- EncoderFallback.cs
- FormClosingEvent.cs
- MultidimensionalArrayItemReference.cs
- ToolStripItemRenderEventArgs.cs
- CodeTypeMember.cs
- LinqDataSourceEditData.cs
- FrameworkEventSource.cs
- DbBuffer.cs
- ExpressionBindings.cs
- HitTestFilterBehavior.cs
- SmtpFailedRecipientException.cs
- UriTemplate.cs
- DbParameterCollectionHelper.cs
- HorizontalAlignConverter.cs
- SoapAttributes.cs
- DragDrop.cs
- SqlEnums.cs
- TransactionTable.cs
- CellTreeNodeVisitors.cs
- XmlDataLoader.cs
- BuildDependencySet.cs
- SemanticValue.cs
- NavigateEvent.cs
- ColumnCollection.cs
- DrawingBrush.cs
- SecurityUtils.cs
- WindowsGraphicsWrapper.cs
- DeviceSpecificDesigner.cs
- ReadWriteObjectLock.cs
- MissingFieldException.cs
- SmtpCommands.cs
- StringFreezingAttribute.cs
- SHA512Managed.cs
- UIAgentMonitor.cs
- PrincipalPermissionMode.cs
- Bezier.cs
- DesignerActionGlyph.cs
- DashStyle.cs
- NullableLongSumAggregationOperator.cs
- DataColumnChangeEvent.cs
- AttributeData.cs
- SourceExpressionException.cs
- PermissionListSet.cs
- IChannel.cs
- WebCategoryAttribute.cs
- AvtEvent.cs
- ServiceDurableInstance.cs
- PersistChildrenAttribute.cs
- TextSelectionProcessor.cs
- ACL.cs
- Int32EqualityComparer.cs
- StyleHelper.cs
- TypographyProperties.cs
- ContextMenu.cs
- CodeDomSerializer.cs
- Metadata.cs
- Itemizer.cs
- ConnectionPoint.cs
- MouseActionConverter.cs
- BordersPage.cs
- DurationConverter.cs
- CodeFieldReferenceExpression.cs
- DataTableNewRowEvent.cs
- Timer.cs
- DependencyPropertyAttribute.cs
- GroupStyle.cs
- OutOfMemoryException.cs
- BaseCollection.cs
- XmlArrayItemAttribute.cs
- CaseStatement.cs
- ControlType.cs
- AttachedAnnotation.cs
- SspiHelper.cs
- WebServiceData.cs
- ColumnBinding.cs
- PackageStore.cs
- SessionState.cs
- WebPartConnectVerb.cs
- TypeSemantics.cs
- LabelLiteral.cs
- SmiGettersStream.cs
- MissingMemberException.cs
- FormConverter.cs
- BadImageFormatException.cs
- GACMembershipCondition.cs
- HiddenField.cs
- MemberMaps.cs
- PublishLicense.cs
- EventHandlers.cs
- MetadataUtilsSmi.cs
- ReflectionServiceProvider.cs
- GridViewHeaderRowPresenter.cs
- CodeStatementCollection.cs
- Restrictions.cs