Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / DEVDIV / depot / DevDiv / releases / whidbey / QFE / 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. //------------------------------------------------------------------------------ //// 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ObjectQuery_EntitySqlExtensions.cs
- Point3DCollection.cs
- AliasedExpr.cs
- XmlExtensionFunction.cs
- ServiceRouteHandler.cs
- PropertyMapper.cs
- Parsers.cs
- XmlSignatureManifest.cs
- SafeViewOfFileHandle.cs
- BindingSourceDesigner.cs
- EntityCollectionChangedParams.cs
- GridViewHeaderRowPresenter.cs
- ValidationHelpers.cs
- DiscoveryClientRequestChannel.cs
- ActionMessageFilter.cs
- GeneralTransformGroup.cs
- DropSourceBehavior.cs
- StaticFileHandler.cs
- SqlCrossApplyToCrossJoin.cs
- Propagator.JoinPropagator.JoinPredicateVisitor.cs
- HyperLinkColumn.cs
- EmptyEnumerable.cs
- SendKeys.cs
- LineSegment.cs
- XmlSchemaObject.cs
- DirectoryInfo.cs
- ResetableIterator.cs
- WebPartConnectionsConnectVerb.cs
- EventItfInfo.cs
- EditorAttribute.cs
- QueryInterceptorAttribute.cs
- UnsafeNativeMethods.cs
- XmlComment.cs
- FrameworkContextData.cs
- PersistenceContextEnlistment.cs
- StrongTypingException.cs
- PreviewKeyDownEventArgs.cs
- MissingMemberException.cs
- CompiledIdentityConstraint.cs
- SmiContext.cs
- DataServiceException.cs
- TemplateComponentConnector.cs
- ListBindingHelper.cs
- DiffuseMaterial.cs
- MsmqIntegrationInputMessage.cs
- IndexerNameAttribute.cs
- TagNameToTypeMapper.cs
- TagPrefixAttribute.cs
- AuthStoreRoleProvider.cs
- AspNetSynchronizationContext.cs
- BinaryMessageEncoder.cs
- NameSpaceExtractor.cs
- PageThemeBuildProvider.cs
- TryExpression.cs
- AppSettingsExpressionBuilder.cs
- TableColumnCollectionInternal.cs
- TrackingRecord.cs
- NumberFormatter.cs
- InputProviderSite.cs
- WmlCalendarAdapter.cs
- BinaryMessageEncodingElement.cs
- MtomMessageEncodingElement.cs
- DataTableMappingCollection.cs
- CompensationDesigner.cs
- DesignerDataParameter.cs
- Types.cs
- CustomAttributeBuilder.cs
- ApplicationContext.cs
- WebMessageBodyStyleHelper.cs
- GPPOINTF.cs
- ellipse.cs
- Size.cs
- InternalDuplexChannelListener.cs
- WebPartDisplayModeEventArgs.cs
- Filter.cs
- DbTransaction.cs
- DesignBindingValueUIHandler.cs
- Pens.cs
- BridgeDataReader.cs
- SpeechSynthesizer.cs
- ExclusiveTcpTransportManager.cs
- BindingExpressionUncommonField.cs
- CompoundFileDeflateTransform.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- TypeLibConverter.cs
- NameValueCollection.cs
- SerializationSectionGroup.cs
- CatalogPartChrome.cs
- ServiceControllerDesigner.cs
- SessionKeyExpiredException.cs
- RawUIStateInputReport.cs
- InspectionWorker.cs
- PageContent.cs
- ObfuscationAttribute.cs
- TimeZoneInfo.cs
- TimestampInformation.cs
- InvalidCommandTreeException.cs
- DispatcherTimer.cs
- DataRecordInternal.cs
- MediaCommands.cs