Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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
- ObjectHandle.cs
- ObjectContext.cs
- StrokeNodeOperations.cs
- PageRequestManager.cs
- IntPtr.cs
- SingleAnimation.cs
- XmlAggregates.cs
- Triangle.cs
- ImageDrawing.cs
- ObjectDataSourceMethodEventArgs.cs
- RecognitionResult.cs
- DispatcherHooks.cs
- TextEditor.cs
- SwitchAttribute.cs
- ScriptControl.cs
- Soap12ServerProtocol.cs
- arabicshape.cs
- List.cs
- TouchesCapturedWithinProperty.cs
- APCustomTypeDescriptor.cs
- ReflectionTypeLoadException.cs
- EventWaitHandle.cs
- CounterCreationData.cs
- HelpInfo.cs
- TreeViewHitTestInfo.cs
- NativeMethodsCLR.cs
- Token.cs
- Hash.cs
- LaxModeSecurityHeaderElementInferenceEngine.cs
- LeaseManager.cs
- ProfileWorkflowElement.cs
- DeclaredTypeElement.cs
- Equal.cs
- CodeTypeReferenceCollection.cs
- DataBoundControlAdapter.cs
- ExpandCollapsePattern.cs
- SQLMoneyStorage.cs
- CacheChildrenQuery.cs
- CustomMenuItemCollection.cs
- OverlappedAsyncResult.cs
- OleDbReferenceCollection.cs
- RegexCompilationInfo.cs
- LabelEditEvent.cs
- httpapplicationstate.cs
- LinqDataSourceUpdateEventArgs.cs
- _UncName.cs
- IDReferencePropertyAttribute.cs
- CompatibleComparer.cs
- StaticDataManager.cs
- MonthChangedEventArgs.cs
- FaultDescription.cs
- EditCommandColumn.cs
- unitconverter.cs
- RecordsAffectedEventArgs.cs
- Point3DConverter.cs
- OracleTransaction.cs
- ExtensionDataReader.cs
- BlurBitmapEffect.cs
- AesCryptoServiceProvider.cs
- DataBoundLiteralControl.cs
- SingleTagSectionHandler.cs
- XmlHierarchicalDataSourceView.cs
- SqlClientMetaDataCollectionNames.cs
- ClientSponsor.cs
- DrawingContextWalker.cs
- BaseDataBoundControl.cs
- WriteFileContext.cs
- VerbConverter.cs
- DrawingVisual.cs
- CompositeDataBoundControl.cs
- AttachedPropertyBrowsableAttribute.cs
- HttpListenerContext.cs
- SessionState.cs
- InternalSafeNativeMethods.cs
- CaseExpr.cs
- TableRowGroup.cs
- StatusBarAutomationPeer.cs
- ExpressionBuilder.cs
- SafeFileMappingHandle.cs
- PeerApplicationLaunchInfo.cs
- DataGridViewImageColumn.cs
- ImageDrawing.cs
- ValidationPropertyAttribute.cs
- NamedPipeActivation.cs
- SourceFileBuildProvider.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- Stylus.cs
- ContravarianceAdapter.cs
- OracleConnectionStringBuilder.cs
- DataControlFieldHeaderCell.cs
- EntityDataSourceState.cs
- DesignTable.cs
- SourceFileInfo.cs
- SQLResource.cs
- TimeSpanSecondsConverter.cs
- RegistrationContext.cs
- EntityDataSourceMemberPath.cs
- WeakReference.cs
- StoryFragments.cs
- SafeCryptContextHandle.cs