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
- ThrowHelper.cs
- CounterSet.cs
- SafeHandle.cs
- EntityContainerEmitter.cs
- XPathNodeHelper.cs
- PerformanceCounterManager.cs
- UniformGrid.cs
- ObjRef.cs
- SingleObjectCollection.cs
- X509Certificate.cs
- GridProviderWrapper.cs
- DragStartedEventArgs.cs
- ScriptManagerProxy.cs
- DataTemplate.cs
- PngBitmapDecoder.cs
- TextSelection.cs
- InstanceView.cs
- HitTestParameters3D.cs
- TableRowsCollectionEditor.cs
- Message.cs
- UIElement.cs
- GraphicsPathIterator.cs
- DataGridClipboardHelper.cs
- XLinq.cs
- Point3DIndependentAnimationStorage.cs
- DataGridViewBand.cs
- SQLMembershipProvider.cs
- GridToolTip.cs
- WebPartVerbCollection.cs
- Typeface.cs
- Pen.cs
- FastEncoderWindow.cs
- OrderedEnumerableRowCollection.cs
- BooleanProjectedSlot.cs
- VirtualizedContainerService.cs
- SqlUserDefinedTypeAttribute.cs
- HttpBrowserCapabilitiesWrapper.cs
- formatter.cs
- NavigationPropertyEmitter.cs
- SQLBinaryStorage.cs
- ToolStripSeparatorRenderEventArgs.cs
- SelectionList.cs
- MulticastNotSupportedException.cs
- CalendarDayButton.cs
- QuaternionIndependentAnimationStorage.cs
- WinCategoryAttribute.cs
- ProtocolsConfigurationEntry.cs
- MenuItem.cs
- ViewStateChangedEventArgs.cs
- XmlDataCollection.cs
- OleDbWrapper.cs
- RIPEMD160.cs
- QilXmlReader.cs
- EditorPartCollection.cs
- Normalization.cs
- EntityType.cs
- ListViewEditEventArgs.cs
- AppDomainCompilerProxy.cs
- ProviderConnectionPointCollection.cs
- DoubleLinkListEnumerator.cs
- OleDbWrapper.cs
- Evidence.cs
- DesignerActionPanel.cs
- XhtmlStyleClass.cs
- MimeTypeMapper.cs
- ReadContentAsBinaryHelper.cs
- RotateTransform.cs
- ChangeConflicts.cs
- SemanticResolver.cs
- ReadOnlyDictionary.cs
- UIElementAutomationPeer.cs
- TableItemStyle.cs
- LongSumAggregationOperator.cs
- AddressAccessDeniedException.cs
- NodeFunctions.cs
- AssemblyAttributesGoHere.cs
- ChannelFactoryRefCache.cs
- FilterableAttribute.cs
- DLinqAssociationProvider.cs
- ImpersonateTokenRef.cs
- PropertyItem.cs
- SkewTransform.cs
- coordinator.cs
- XmlReaderSettings.cs
- SectionXmlInfo.cs
- StringTraceRecord.cs
- RIPEMD160Managed.cs
- InkCanvasSelectionAdorner.cs
- OrderedDictionaryStateHelper.cs
- TemplateField.cs
- ScriptingWebServicesSectionGroup.cs
- ConnectivityStatus.cs
- InternalConfigRoot.cs
- XmlSchemaSet.cs
- PersonalizationStateInfo.cs
- ByteBufferPool.cs
- EntityStoreSchemaGenerator.cs
- CodeEventReferenceExpression.cs
- NonParentingControl.cs
- Compiler.cs