Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- IsolatedStorageFile.cs
- TextEditorTyping.cs
- SqlDataReader.cs
- DecoderFallbackWithFailureFlag.cs
- ClrProviderManifest.cs
- WindowsSpinner.cs
- DocumentXPathNavigator.cs
- RTLAwareMessageBox.cs
- RequiredArgumentAttribute.cs
- FormViewUpdatedEventArgs.cs
- GroupQuery.cs
- Rectangle.cs
- OdbcParameter.cs
- LinqDataSourceContextData.cs
- BamlMapTable.cs
- BitmapCacheBrush.cs
- FrameworkRichTextComposition.cs
- TemplatePartAttribute.cs
- MembershipPasswordException.cs
- UpdatePanelTriggerCollection.cs
- FileNotFoundException.cs
- PropertyNames.cs
- WeakEventManager.cs
- CodeNamespace.cs
- PerformanceCounterLib.cs
- CounterCreationDataCollection.cs
- CmsInterop.cs
- SecuritySessionServerSettings.cs
- Vector3DCollectionConverter.cs
- PropertyCondition.cs
- SourceLineInfo.cs
- BinHexEncoder.cs
- DataGridClipboardHelper.cs
- CompiledQuery.cs
- WebResourceAttribute.cs
- TextureBrush.cs
- ToolBarOverflowPanel.cs
- MatrixAnimationBase.cs
- StylusDownEventArgs.cs
- SqlException.cs
- IisTraceWebEventProvider.cs
- MemberPathMap.cs
- DataControlFieldHeaderCell.cs
- XmlDataImplementation.cs
- updatecommandorderer.cs
- Int64Animation.cs
- SHA512.cs
- WebBrowserDesigner.cs
- _DisconnectOverlappedAsyncResult.cs
- ThreadExceptionDialog.cs
- ToolboxItem.cs
- DataGridCellAutomationPeer.cs
- PagerSettings.cs
- Typography.cs
- _CommandStream.cs
- DrawingContextDrawingContextWalker.cs
- BatchStream.cs
- TypeSystem.cs
- AuthorizationRule.cs
- TreeViewCancelEvent.cs
- TypeUsageBuilder.cs
- entitydatasourceentitysetnameconverter.cs
- ProtocolsConfigurationEntry.cs
- RequestSecurityTokenForGetBrowserToken.cs
- securitycriticaldataformultiplegetandset.cs
- Oid.cs
- TextServicesPropertyRanges.cs
- XPathAxisIterator.cs
- CursorConverter.cs
- PropertyTab.cs
- Avt.cs
- EditorPart.cs
- DataObjectPastingEventArgs.cs
- Ops.cs
- ParsedRoute.cs
- XmlSchemaSequence.cs
- EdgeModeValidation.cs
- WarningException.cs
- NamespaceList.cs
- SoapWriter.cs
- ThreadSafeList.cs
- dbenumerator.cs
- TokenBasedSet.cs
- HostedAspNetEnvironment.cs
- PropertyDescriptor.cs
- DelimitedListTraceListener.cs
- HttpRawResponse.cs
- HandlerBase.cs
- ControlBindingsCollection.cs
- CultureMapper.cs
- LinkLabel.cs
- XPathAncestorIterator.cs
- ObjectRef.cs
- _ProxyChain.cs
- TimeSpanStorage.cs
- SkipQueryOptionExpression.cs
- FrameworkElementFactory.cs
- ProcessHostConfigUtils.cs
- KeyNotFoundException.cs
- SettingsPropertyNotFoundException.cs