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
- XmlNamedNodeMap.cs
- AuthenticationModeHelper.cs
- WebPartUserCapability.cs
- PropertyToken.cs
- HttpGetProtocolImporter.cs
- GridLengthConverter.cs
- InputMethod.cs
- ReferentialConstraint.cs
- Odbc32.cs
- GroupByQueryOperator.cs
- XmlSchemaElement.cs
- SQLDouble.cs
- PropertyInformation.cs
- ContainerParagraph.cs
- HelloOperation11AsyncResult.cs
- ExecutionEngineException.cs
- WindowsImpersonationContext.cs
- EnumType.cs
- _HeaderInfoTable.cs
- CodeDirectionExpression.cs
- CatalogZoneDesigner.cs
- SerializerDescriptor.cs
- _UriTypeConverter.cs
- ControlBindingsCollection.cs
- HttpStreamXmlDictionaryWriter.cs
- ToolboxItem.cs
- InternalConfigConfigurationFactory.cs
- SyndicationSerializer.cs
- UnsafeNativeMethods.cs
- ManifestSignatureInformation.cs
- StringCollection.cs
- ProjectedWrapper.cs
- TypePresenter.xaml.cs
- WebPartConnectionCollection.cs
- LoginUtil.cs
- Char.cs
- CollectionChangeEventArgs.cs
- Model3DGroup.cs
- ColorAnimationUsingKeyFrames.cs
- _KerberosClient.cs
- BitmapEffectInputData.cs
- Translator.cs
- AssemblyBuilder.cs
- Internal.cs
- CLRBindingWorker.cs
- DataGridViewColumnEventArgs.cs
- CompositeDataBoundControl.cs
- DbXmlEnabledProviderManifest.cs
- ResourceProviderFactory.cs
- SelectionProcessor.cs
- ResourceIDHelper.cs
- ExpressionTextBox.xaml.cs
- RootBrowserWindowAutomationPeer.cs
- SiteMapPath.cs
- HostProtectionPermission.cs
- CompensationExtension.cs
- _ListenerResponseStream.cs
- ClockGroup.cs
- AssemblyNameProxy.cs
- KeyGesture.cs
- SoapDocumentMethodAttribute.cs
- GroupItem.cs
- DataGridCommandEventArgs.cs
- DocumentScope.cs
- XmlDataContract.cs
- WorkflowService.cs
- HttpCookieCollection.cs
- NavigateEvent.cs
- ConfigurationStrings.cs
- ScrollChangedEventArgs.cs
- EventProviderBase.cs
- TypeHelpers.cs
- StringComparer.cs
- PermissionSetTriple.cs
- HttpClientCertificate.cs
- RawMouseInputReport.cs
- DesignerDataRelationship.cs
- BufferModesCollection.cs
- ElapsedEventArgs.cs
- FilterElement.cs
- NumberSubstitution.cs
- XmlTextReaderImplHelpers.cs
- ItemContainerGenerator.cs
- ScriptHandlerFactory.cs
- CommentEmitter.cs
- AttachedProperty.cs
- LassoSelectionBehavior.cs
- InputLanguageEventArgs.cs
- Crypto.cs
- FormatConvertedBitmap.cs
- SafeFileMappingHandle.cs
- SafeIUnknown.cs
- SecureStringHasher.cs
- HelpProvider.cs
- ImageButton.cs
- BitmapImage.cs
- UTF8Encoding.cs
- WebPartDisplayMode.cs
- NullExtension.cs
- TraceHandler.cs