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
- WebPart.cs
- NativeMethods.cs
- PlatformNotSupportedException.cs
- InputGestureCollection.cs
- BindingObserver.cs
- OracleColumn.cs
- objectresult_tresulttype.cs
- FindCriteria.cs
- TcpTransportSecurityElement.cs
- CodeAttributeDeclaration.cs
- FixedBufferAttribute.cs
- SqlFunctions.cs
- ValidatingReaderNodeData.cs
- AdCreatedEventArgs.cs
- WindowsRichEdit.cs
- SoapAttributeAttribute.cs
- embossbitmapeffect.cs
- Label.cs
- SerialReceived.cs
- AnnouncementSendsAsyncResult.cs
- DbConnectionOptions.cs
- TabControl.cs
- TextRunTypographyProperties.cs
- ObjectItemAttributeAssemblyLoader.cs
- HeaderedContentControl.cs
- DeleteWorkflowOwnerCommand.cs
- PasswordPropertyTextAttribute.cs
- StrokeFIndices.cs
- MetadataCache.cs
- Ref.cs
- UInt16.cs
- OdbcConnection.cs
- PrintPreviewGraphics.cs
- Invariant.cs
- TraceHwndHost.cs
- ConfigDefinitionUpdates.cs
- ObjectAnimationBase.cs
- ConfigXmlCDataSection.cs
- DataControlImageButton.cs
- DecimalAnimationBase.cs
- XhtmlBasicTextBoxAdapter.cs
- JoinSymbol.cs
- TextBreakpoint.cs
- LocalValueEnumerator.cs
- PersonalizationDictionary.cs
- COM2EnumConverter.cs
- AdornerLayer.cs
- EffectiveValueEntry.cs
- AutomationPatternInfo.cs
- SoapFormatterSinks.cs
- SQLString.cs
- RegexCompiler.cs
- UpdatePanelTriggerCollection.cs
- GuidConverter.cs
- ProviderBase.cs
- SoundPlayer.cs
- Int16Converter.cs
- ConnectionsZone.cs
- OptimizerPatterns.cs
- CurrentChangingEventArgs.cs
- DSASignatureFormatter.cs
- SmtpTransport.cs
- AppSettingsSection.cs
- SqlIdentifier.cs
- HitTestWithGeometryDrawingContextWalker.cs
- ProcessThreadCollection.cs
- ObjectComplexPropertyMapping.cs
- WebPartCatalogCloseVerb.cs
- elementinformation.cs
- ContainerAction.cs
- CacheVirtualItemsEvent.cs
- wgx_render.cs
- DataGridItemCollection.cs
- Graphics.cs
- WinEventHandler.cs
- CodeBinaryOperatorExpression.cs
- TreeView.cs
- TemplateXamlParser.cs
- IUnknownConstantAttribute.cs
- FontCollection.cs
- EntityDataSourceSelectingEventArgs.cs
- Decorator.cs
- FormatException.cs
- BuildManagerHost.cs
- MatrixAnimationUsingKeyFrames.cs
- HtmlElementErrorEventArgs.cs
- LoginUtil.cs
- RecognitionEventArgs.cs
- FileDialog_Vista_Interop.cs
- DesignerAttribute.cs
- IncomingWebRequestContext.cs
- DataGridViewButtonColumn.cs
- HostingEnvironmentException.cs
- NumericExpr.cs
- SocketPermission.cs
- CategoryNameCollection.cs
- autovalidator.cs
- LiteralTextContainerControlBuilder.cs
- SqlCacheDependencyDatabaseCollection.cs
- CodeSubDirectory.cs