Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- BaseProcessor.cs
- TreeNodeStyleCollectionEditor.cs
- MenuAdapter.cs
- PointConverter.cs
- WebPartVerbCollection.cs
- ClientRolePrincipal.cs
- XmlObjectSerializerReadContextComplexJson.cs
- CodeTypeReferenceExpression.cs
- XmlBinaryWriter.cs
- WebPartDescription.cs
- TransformPattern.cs
- MasterPage.cs
- GradientSpreadMethodValidation.cs
- rsa.cs
- ComponentChangingEvent.cs
- _NetRes.cs
- WeakRefEnumerator.cs
- OperationGenerator.cs
- DataTransferEventArgs.cs
- ProgressiveCrcCalculatingStream.cs
- UIPropertyMetadata.cs
- DynamicRenderer.cs
- AccessKeyManager.cs
- HostingEnvironmentSection.cs
- GridViewItemAutomationPeer.cs
- OleTxTransactionInfo.cs
- ConsoleCancelEventArgs.cs
- ProfilePropertyMetadata.cs
- StringDictionaryWithComparer.cs
- XamlNamespaceHelper.cs
- ParagraphResult.cs
- CounterSample.cs
- ToolStripLocationCancelEventArgs.cs
- input.cs
- NegatedCellConstant.cs
- Subtree.cs
- ImageCodecInfo.cs
- DocumentSchemaValidator.cs
- TransformPattern.cs
- SqlWebEventProvider.cs
- ISO2022Encoding.cs
- ExitEventArgs.cs
- SystemIPInterfaceProperties.cs
- AnonymousIdentificationSection.cs
- SerialStream.cs
- ToolStripPanelCell.cs
- Journaling.cs
- LocationUpdates.cs
- URLString.cs
- WSSecurityJan2004.cs
- XmlTextReader.cs
- SQLDoubleStorage.cs
- SendingRequestEventArgs.cs
- Regex.cs
- PartialTrustVisibleAssembly.cs
- SessionStateModule.cs
- ClientFormsAuthenticationCredentials.cs
- PolicyValidator.cs
- DomNameTable.cs
- DataGridAddNewRow.cs
- CurrentTimeZone.cs
- CodePageUtils.cs
- Vector3dCollection.cs
- QueryParameter.cs
- SchemaElementLookUpTable.cs
- DBConcurrencyException.cs
- DataGridViewHitTestInfo.cs
- WebPartDescription.cs
- ACE.cs
- DataGridViewIntLinkedList.cs
- HiddenFieldDesigner.cs
- Permission.cs
- DetailsViewDeletedEventArgs.cs
- DataServiceConfiguration.cs
- CodeMemberEvent.cs
- SqlTopReducer.cs
- BinaryObjectReader.cs
- WindowsListViewScroll.cs
- DecoderNLS.cs
- AbandonedMutexException.cs
- FilterEventArgs.cs
- xsdvalidator.cs
- OutputScope.cs
- Globals.cs
- NameService.cs
- ToolStripSplitStackLayout.cs
- SharedHttpsTransportManager.cs
- NetDataContractSerializer.cs
- RuleSetBrowserDialog.cs
- xmlglyphRunInfo.cs
- CodeConditionStatement.cs
- ActivationServices.cs
- RoleGroup.cs
- ActivityMarkupSerializationProvider.cs
- DataService.cs
- TraceSource.cs
- Baml2006SchemaContext.cs
- OdbcEnvironment.cs
- EditorPartCollection.cs
- sqlmetadatafactory.cs