Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / 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 } */ } }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ActivitySurrogate.cs
- PageClientProxyGenerator.cs
- ReceiveMessageContent.cs
- ListViewItem.cs
- HttpVersion.cs
- TemplateColumn.cs
- ListView.cs
- EntityContainerEmitter.cs
- StringResourceManager.cs
- TypeSystemProvider.cs
- XmlFormatReaderGenerator.cs
- ActiveXSite.cs
- XmlSchemaExporter.cs
- PrintDialog.cs
- RootBrowserWindowAutomationPeer.cs
- XmlSerializerSection.cs
- Intellisense.cs
- ToolStripPanelCell.cs
- MenuEventArgs.cs
- Point.cs
- SqlMethodTransformer.cs
- BeginStoryboard.cs
- ConstantProjectedSlot.cs
- ObjectDataSourceView.cs
- counter.cs
- IntSecurity.cs
- ObjectDataSourceSelectingEventArgs.cs
- XmlSchemaException.cs
- HighContrastHelper.cs
- TrustLevelCollection.cs
- IssuerInformation.cs
- WebServiceEnumData.cs
- CodeDomSerializerBase.cs
- FileSystemWatcher.cs
- SqlDataSourceWizardForm.cs
- HelpOperationInvoker.cs
- PngBitmapEncoder.cs
- OrderPreservingPipeliningMergeHelper.cs
- ServiceRoute.cs
- CatalogZoneDesigner.cs
- ProcessProtocolHandler.cs
- WinFormsSecurity.cs
- SkipStoryboardToFill.cs
- DataBindingExpressionBuilder.cs
- DataControlHelper.cs
- DefaultValueAttribute.cs
- ListViewTableCell.cs
- PasswordDeriveBytes.cs
- JsonEncodingStreamWrapper.cs
- Message.cs
- DataIdProcessor.cs
- ItemsControl.cs
- LinkArea.cs
- DelegatedStream.cs
- ObjectSecurityT.cs
- PrintDialog.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- ExpressionConverter.cs
- DataGridViewControlCollection.cs
- OleDbConnectionFactory.cs
- GeneralTransform3DTo2DTo3D.cs
- JsonWriter.cs
- EventMappingSettingsCollection.cs
- AudienceUriMode.cs
- StructuredTypeInfo.cs
- sqlcontext.cs
- ActiveDocumentEvent.cs
- NeutralResourcesLanguageAttribute.cs
- HttpCachePolicyWrapper.cs
- TemplateBaseAction.cs
- Thread.cs
- DefaultParameterValueAttribute.cs
- RepeaterItemCollection.cs
- UInt64Converter.cs
- OleDbError.cs
- ToolStripScrollButton.cs
- ContentHostHelper.cs
- FormsAuthenticationTicket.cs
- PerformanceCounter.cs
- PerformanceCounter.cs
- ParameterToken.cs
- MappingException.cs
- IdnMapping.cs
- Thread.cs
- WindowsProgressbar.cs
- ScriptControlManager.cs
- ContractInferenceHelper.cs
- XmlReturnWriter.cs
- BamlReader.cs
- WsatAdminException.cs
- UniqueConstraint.cs
- Point.cs
- BatchStream.cs
- PageTheme.cs
- WarningException.cs
- FileRecordSequenceCompletedAsyncResult.cs
- CollectionViewProxy.cs
- TextServicesDisplayAttributePropertyRanges.cs
- ExpressionConverter.cs
- TraceHandler.cs