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
- DataColumnMapping.cs
- ELinqQueryState.cs
- FormViewDeletedEventArgs.cs
- TransformConverter.cs
- NonBatchDirectoryCompiler.cs
- DictionaryEntry.cs
- ColumnResizeUndoUnit.cs
- XmlSerializableReader.cs
- DateTimeOffset.cs
- sqlnorm.cs
- SecurityUtils.cs
- ZipIOBlockManager.cs
- TypeBuilder.cs
- RestClientProxyHandler.cs
- DataBindingExpressionBuilder.cs
- ProviderUtil.cs
- HandleCollector.cs
- TraceContext.cs
- Win32Native.cs
- BitStack.cs
- PluralizationServiceUtil.cs
- UserControlDocumentDesigner.cs
- DocumentPageView.cs
- CheckBoxPopupAdapter.cs
- XmlEncApr2001.cs
- MostlySingletonList.cs
- ScriptingRoleServiceSection.cs
- KeyTimeConverter.cs
- NavigationEventArgs.cs
- SinglePhaseEnlistment.cs
- IDQuery.cs
- webbrowsersite.cs
- PrintPageEvent.cs
- SingleAnimationUsingKeyFrames.cs
- StorageFunctionMapping.cs
- Style.cs
- AttributeCollection.cs
- SequentialUshortCollection.cs
- DependencySource.cs
- RepeaterItemEventArgs.cs
- SettingsPropertyNotFoundException.cs
- GeneralTransformCollection.cs
- SerializationException.cs
- DropDownButton.cs
- ManagementEventWatcher.cs
- ScriptMethodAttribute.cs
- X509Chain.cs
- exports.cs
- DataViewSetting.cs
- HandleCollector.cs
- FragmentNavigationEventArgs.cs
- FixedSOMLineCollection.cs
- MappingSource.cs
- AuthenticationConfig.cs
- ArglessEventHandlerProxy.cs
- BitmapEffectInputConnector.cs
- ModuleElement.cs
- StylusPointDescription.cs
- Schema.cs
- XmlIncludeAttribute.cs
- IndividualDeviceConfig.cs
- EventEntry.cs
- Adorner.cs
- ScriptIgnoreAttribute.cs
- ConfigurationSectionGroup.cs
- PerspectiveCamera.cs
- GuidConverter.cs
- ModelFunctionTypeElement.cs
- EdmMember.cs
- JpegBitmapDecoder.cs
- Message.cs
- PriorityBindingExpression.cs
- SafeSecurityHelper.cs
- ExceptionHelpers.cs
- QilBinary.cs
- FilteredDataSetHelper.cs
- ValidationErrorCollection.cs
- UnsafeNativeMethods.cs
- HyperlinkAutomationPeer.cs
- LinqToSqlWrapper.cs
- StringValidatorAttribute.cs
- DynamicObjectAccessor.cs
- ProfileService.cs
- FileNotFoundException.cs
- XmlSchemaImport.cs
- SizeF.cs
- ParameterExpression.cs
- WpfPayload.cs
- Propagator.ExtentPlaceholderCreator.cs
- ToolStripDropDownItem.cs
- EventDescriptor.cs
- WriteStateInfoBase.cs
- MimeMultiPart.cs
- StyleCollection.cs
- CacheRequest.cs
- URLString.cs
- HttpListenerRequestUriBuilder.cs
- TriggerBase.cs
- MessageHeaderDescription.cs
- SplashScreenNativeMethods.cs