Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- AnonymousIdentificationModule.cs
- ExpressionBinding.cs
- BasicCommandTreeVisitor.cs
- TypeTypeConverter.cs
- KeyValueConfigurationElement.cs
- FormsAuthenticationCredentials.cs
- MsdtcWrapper.cs
- OciHandle.cs
- AdvancedBindingPropertyDescriptor.cs
- RepeatInfo.cs
- XmlSchemaAll.cs
- ReachDocumentSequenceSerializerAsync.cs
- DataControlFieldHeaderCell.cs
- XmlQueryType.cs
- GridLength.cs
- SmiMetaDataProperty.cs
- ExpressionLexer.cs
- DocumentViewerBaseAutomationPeer.cs
- TextShapeableCharacters.cs
- ConfigXmlDocument.cs
- SecurityKeyIdentifierClause.cs
- PtsHelper.cs
- TranslateTransform3D.cs
- ColumnCollectionEditor.cs
- Overlapped.cs
- RenderContext.cs
- SrgsElementFactoryCompiler.cs
- ImageDrawing.cs
- SqlLiftWhereClauses.cs
- ProcessHostServerConfig.cs
- MouseBinding.cs
- RemotingConfiguration.cs
- ErrorHandler.cs
- HierarchicalDataBoundControlAdapter.cs
- SiteMap.cs
- RelationshipWrapper.cs
- InstanceCreationEditor.cs
- SqlDataSourceSelectingEventArgs.cs
- AnnotationResourceCollection.cs
- InstanceDataCollection.cs
- UdpUtility.cs
- TypeDependencyAttribute.cs
- _ScatterGatherBuffers.cs
- CodeGeneratorOptions.cs
- XmlDataSource.cs
- columnmapkeybuilder.cs
- TraceSection.cs
- List.cs
- XmlTextEncoder.cs
- InvalidEnumArgumentException.cs
- StateWorkerRequest.cs
- DetailsViewDeleteEventArgs.cs
- ValidatorAttribute.cs
- DataTrigger.cs
- HttpRuntime.cs
- ipaddressinformationcollection.cs
- ConfigurationManagerInternal.cs
- SelectorAutomationPeer.cs
- BaseResourcesBuildProvider.cs
- FastEncoder.cs
- Identity.cs
- Profiler.cs
- PointConverter.cs
- RoutedEventConverter.cs
- BridgeDataRecord.cs
- ByteConverter.cs
- AdapterUtil.cs
- UserUseLicenseDictionaryLoader.cs
- StringResourceManager.cs
- HtmlInputRadioButton.cs
- X509RawDataKeyIdentifierClause.cs
- Pair.cs
- SymmetricCryptoHandle.cs
- WizardPanelChangingEventArgs.cs
- BasicKeyConstraint.cs
- MouseActionValueSerializer.cs
- COMException.cs
- WorkflowOwnerAsyncResult.cs
- DPCustomTypeDescriptor.cs
- TcpChannelHelper.cs
- SQLResource.cs
- HttpCachePolicy.cs
- ImageMapEventArgs.cs
- PerformanceCounterPermission.cs
- DataGridTextBox.cs
- DataGridViewDataErrorEventArgs.cs
- VirtualPathExtension.cs
- D3DImage.cs
- RenderOptions.cs
- FormViewDeleteEventArgs.cs
- TrustManager.cs
- ComponentDispatcherThread.cs
- MessageQueueTransaction.cs
- Compiler.cs
- ComponentSerializationService.cs
- APCustomTypeDescriptor.cs
- MasterPageParser.cs
- AccessControlEntry.cs
- UserControlDocumentDesigner.cs
- TextEditorCopyPaste.cs