Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ColumnPropertiesGroup.cs
- DbParameterCollectionHelper.cs
- PropertyChangedEventArgs.cs
- FakeModelPropertyImpl.cs
- SqlDataSourceTableQuery.cs
- ActivityInfo.cs
- PtsPage.cs
- ItemCollection.cs
- PnrpPermission.cs
- COM2ComponentEditor.cs
- ApplicationGesture.cs
- OpCodes.cs
- InstanceLockedException.cs
- BrushValueSerializer.cs
- EventNotify.cs
- MobileControl.cs
- GPRECTF.cs
- DataGridLinkButton.cs
- HttpRuntime.cs
- XmlDataSourceView.cs
- ChtmlTextWriter.cs
- CellParaClient.cs
- TypeConstant.cs
- DelegatingTypeDescriptionProvider.cs
- StopRoutingHandler.cs
- FlowLayoutPanelDesigner.cs
- elementinformation.cs
- SslStreamSecurityElement.cs
- OutputCacheSettings.cs
- MSHTMLHost.cs
- PolicyException.cs
- FrameworkContentElement.cs
- IFormattable.cs
- BrowserCapabilitiesFactoryBase.cs
- Effect.cs
- WsdlWriter.cs
- SecurityHelper.cs
- PrintDocument.cs
- ExcCanonicalXml.cs
- Header.cs
- TypeContext.cs
- ExpandCollapsePattern.cs
- SqlWorkflowInstanceStoreLock.cs
- MulticastIPAddressInformationCollection.cs
- VisualProxy.cs
- XmlCDATASection.cs
- _TransmitFileOverlappedAsyncResult.cs
- ObjectToIdCache.cs
- DerivedKeySecurityTokenStub.cs
- WorkflowMarkupSerializationProvider.cs
- Grid.cs
- XmlHierarchicalEnumerable.cs
- StackBuilderSink.cs
- ListDesigner.cs
- XomlCompilerParameters.cs
- BitFlagsGenerator.cs
- EditorPartChrome.cs
- TargetConverter.cs
- AppSettingsSection.cs
- BaseParagraph.cs
- KnowledgeBase.cs
- TaskHelper.cs
- TableRow.cs
- DesignSurfaceManager.cs
- IdentityVerifier.cs
- EventPropertyMap.cs
- WebMessageFormatHelper.cs
- ComplusEndpointConfigContainer.cs
- XmlSchemaObjectTable.cs
- ApplicationActivator.cs
- Process.cs
- WebPartTransformer.cs
- XamlVector3DCollectionSerializer.cs
- RootProjectionNode.cs
- Path.cs
- DiscriminatorMap.cs
- DataSourceView.cs
- XmlBindingWorker.cs
- Funcletizer.cs
- PowerEase.cs
- arclist.cs
- RenderTargetBitmap.cs
- HtmlAnchor.cs
- HtmlControlDesigner.cs
- ExpressionBuilder.cs
- TemplatedWizardStep.cs
- XmlSerializerFactory.cs
- PropertyItem.cs
- CharStorage.cs
- DropShadowBitmapEffect.cs
- GraphicsContext.cs
- MsmqAppDomainProtocolHandler.cs
- DummyDataSource.cs
- AmbientValueAttribute.cs
- XmlValidatingReader.cs
- DataGridViewControlCollection.cs
- RoutedEvent.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- SynchronizationContext.cs
- FieldTemplateUserControl.cs