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
- COMException.cs
- IFlowDocumentViewer.cs
- WebContext.cs
- ProxyGenerator.cs
- FrameworkElement.cs
- InkCanvasInnerCanvas.cs
- SoapExtensionImporter.cs
- TreeViewHitTestInfo.cs
- UserControl.cs
- SqlConnectionPoolGroupProviderInfo.cs
- Transactions.cs
- Win32SafeHandles.cs
- HtmlImage.cs
- PropertyGeneratedEventArgs.cs
- CodeSnippetStatement.cs
- securitymgrsite.cs
- EntityDataSourceValidationException.cs
- WindowsUpDown.cs
- Mouse.cs
- WebServiceMethodData.cs
- DialogWindow.cs
- GridItemPattern.cs
- RelatedImageListAttribute.cs
- HtmlControlDesigner.cs
- ConsumerConnectionPointCollection.cs
- TypeSystemProvider.cs
- ServicesExceptionNotHandledEventArgs.cs
- FlowDecision.cs
- UnsafeNativeMethodsMilCoreApi.cs
- CalendarDay.cs
- Composition.cs
- ContextProperty.cs
- MetadataItemEmitter.cs
- _HeaderInfoTable.cs
- Point4D.cs
- OracleLob.cs
- XmlDataSourceNodeDescriptor.cs
- WebPart.cs
- NameTable.cs
- WasEndpointConfigContainer.cs
- GradientBrush.cs
- FrameworkPropertyMetadata.cs
- DataSourceXmlAttributeAttribute.cs
- PageStatePersister.cs
- nulltextnavigator.cs
- Button.cs
- XmlPreloadedResolver.cs
- IIS7UserPrincipal.cs
- ActiveXSite.cs
- CustomMenuItemCollection.cs
- XmlTextReaderImpl.cs
- ProxyFragment.cs
- AutoGeneratedField.cs
- ToolStripItem.cs
- DataGridViewRow.cs
- XmlDataCollection.cs
- XmlAnyElementAttributes.cs
- StreamedWorkflowDefinitionContext.cs
- JavaScriptString.cs
- MatrixCamera.cs
- MDIClient.cs
- WriteableBitmap.cs
- XmlWhitespace.cs
- GeneralTransform.cs
- ValidationErrorCollection.cs
- SmiEventSink.cs
- CanExecuteRoutedEventArgs.cs
- DataSourceHelper.cs
- MissingMethodException.cs
- RuleSettingsCollection.cs
- mediaeventshelper.cs
- StateDesigner.CommentLayoutGlyph.cs
- StandardOleMarshalObject.cs
- WebControl.cs
- AttachedPropertyMethodSelector.cs
- XmlSerializerOperationGenerator.cs
- HelpFileFileNameEditor.cs
- XmlILAnnotation.cs
- WorkflowMarkupElementEventArgs.cs
- ToolStripLabel.cs
- MetabaseServerConfig.cs
- HierarchicalDataTemplate.cs
- FixedDocumentSequencePaginator.cs
- DecoratedNameAttribute.cs
- PropertiesTab.cs
- MultipartContentParser.cs
- XsltSettings.cs
- SrgsElementFactoryCompiler.cs
- HttpContextWrapper.cs
- DropShadowEffect.cs
- ListViewSelectEventArgs.cs
- PageParserFilter.cs
- ScriptIgnoreAttribute.cs
- ValueType.cs
- ListViewGroupConverter.cs
- ControlPropertyNameConverter.cs
- ApplicationSecurityManager.cs
- DirectoryNotFoundException.cs
- TraceSource.cs
- DataGridViewCellErrorTextNeededEventArgs.cs