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
- InkCanvasAutomationPeer.cs
- JsonReaderWriterFactory.cs
- SmtpNtlmAuthenticationModule.cs
- CodeMethodInvokeExpression.cs
- RawStylusInputCustomData.cs
- SiteMap.cs
- Icon.cs
- VisualStyleInformation.cs
- PriorityChain.cs
- ObservableCollection.cs
- StringPropertyBuilder.cs
- EntityDataSourceUtil.cs
- TrustSection.cs
- PointValueSerializer.cs
- LayoutTable.cs
- VisualTarget.cs
- AnnotationObservableCollection.cs
- HeaderUtility.cs
- FreezableOperations.cs
- ButtonStandardAdapter.cs
- UmAlQuraCalendar.cs
- XmlSchemaImporter.cs
- ReliableSessionBindingElement.cs
- ScriptReferenceEventArgs.cs
- InfoCardAsymmetricCrypto.cs
- ListViewInsertionMark.cs
- CaseInsensitiveComparer.cs
- AlternateView.cs
- WeakReferenceKey.cs
- CellTreeSimplifier.cs
- TreeNodeClickEventArgs.cs
- StringFunctions.cs
- ExtendedProperty.cs
- CacheHelper.cs
- UrlAuthorizationModule.cs
- CrossAppDomainChannel.cs
- BitmapEffect.cs
- Module.cs
- ProfileProvider.cs
- DataSpaceManager.cs
- DataGridColumnHeader.cs
- PublishLicense.cs
- DesignerRegionMouseEventArgs.cs
- HttpResponseInternalWrapper.cs
- FactoryId.cs
- DataViewSettingCollection.cs
- SudsParser.cs
- AdornerDecorator.cs
- PropertyHelper.cs
- SettingsPropertyCollection.cs
- MemoryRecordBuffer.cs
- SolidColorBrush.cs
- TokenBasedSetEnumerator.cs
- Size.cs
- Table.cs
- RelationshipSet.cs
- RecipientServiceModelSecurityTokenRequirement.cs
- DataBinder.cs
- ExecutionContext.cs
- PathTooLongException.cs
- MobilePage.cs
- AssociationProvider.cs
- LongAverageAggregationOperator.cs
- ChildDocumentBlock.cs
- ContentDisposition.cs
- ToolStripLabel.cs
- FixedBufferAttribute.cs
- CodeNamespaceImportCollection.cs
- RequiredAttributeAttribute.cs
- SystemWebSectionGroup.cs
- TreeSet.cs
- TextUtf8RawTextWriter.cs
- GridViewColumnCollection.cs
- BindingSourceDesigner.cs
- RoutedUICommand.cs
- XmlDigitalSignatureProcessor.cs
- ValidatorCompatibilityHelper.cs
- RichTextBox.cs
- CalendarButton.cs
- StateMachineSubscriptionManager.cs
- KeyEventArgs.cs
- SqlXmlStorage.cs
- ExtractedStateEntry.cs
- FontWeight.cs
- HMACSHA384.cs
- BigInt.cs
- MbpInfo.cs
- BaseValidator.cs
- PointLight.cs
- AttributeSetAction.cs
- BaseValidator.cs
- CustomAssemblyResolver.cs
- DataControlImageButton.cs
- Cell.cs
- PasswordRecoveryAutoFormat.cs
- ZoomingMessageFilter.cs
- SiteMapSection.cs
- SqlConnectionString.cs
- ManipulationStartingEventArgs.cs
- TextServicesContext.cs