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
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- GenericsNotImplementedException.cs
- ErrorActivity.cs
- DataGridViewControlCollection.cs
- ProvidersHelper.cs
- TextChangedEventArgs.cs
- CustomAttributeFormatException.cs
- PageVisual.cs
- Odbc32.cs
- DoubleLinkListEnumerator.cs
- LayoutEditorPart.cs
- OleCmdHelper.cs
- BadImageFormatException.cs
- PtsHelper.cs
- InheritanceAttribute.cs
- GuidelineSet.cs
- BindingWorker.cs
- Scheduler.cs
- SafePointer.cs
- HtmlButton.cs
- ConfigurationLoaderException.cs
- SettingsSavedEventArgs.cs
- SqlCachedBuffer.cs
- CaseInsensitiveHashCodeProvider.cs
- TextSpanModifier.cs
- ThreadSafeList.cs
- AppDomainGrammarProxy.cs
- Point3D.cs
- RijndaelManagedTransform.cs
- DataGridAutoFormatDialog.cs
- TextRangeEditTables.cs
- TextEditorThreadLocalStore.cs
- GuidTagList.cs
- Button.cs
- RNGCryptoServiceProvider.cs
- HtmlHistory.cs
- DiscreteKeyFrames.cs
- ResourcePermissionBaseEntry.cs
- HttpClientCertificate.cs
- AutoCompleteStringCollection.cs
- WebServiceData.cs
- DataTableCollection.cs
- PolyBezierSegmentFigureLogic.cs
- BitmapCacheBrush.cs
- WinEventHandler.cs
- PropertyToken.cs
- DataControlField.cs
- Win32KeyboardDevice.cs
- BridgeDataRecord.cs
- GuidTagList.cs
- CrossAppDomainChannel.cs
- RewritingSimplifier.cs
- PeerNameResolver.cs
- TrackBar.cs
- MSAAEventDispatcher.cs
- PageVisual.cs
- ZipIOExtraFieldZip64Element.cs
- MatrixTransform.cs
- AsyncResult.cs
- ClientRoleProvider.cs
- XsdValidatingReader.cs
- SqlDataSourceEnumerator.cs
- EdmComplexPropertyAttribute.cs
- MatrixTransform.cs
- PauseStoryboard.cs
- VectorKeyFrameCollection.cs
- TransportReplyChannelAcceptor.cs
- ExitEventArgs.cs
- DataSourceXmlSubItemAttribute.cs
- dataSvcMapFileLoader.cs
- XsdBuilder.cs
- SessionEndingEventArgs.cs
- ShapingEngine.cs
- SocketAddress.cs
- Operator.cs
- HtmlInputReset.cs
- WizardForm.cs
- CacheOutputQuery.cs
- DtrList.cs
- XPathAncestorQuery.cs
- ImageMetadata.cs
- FileRecordSequence.cs
- StdValidatorsAndConverters.cs
- PresentationUIStyleResources.cs
- DecryptedHeader.cs
- OleDbSchemaGuid.cs
- FillErrorEventArgs.cs
- TreeView.cs
- FormViewPagerRow.cs
- AssertSection.cs
- TemplateControlBuildProvider.cs
- control.ime.cs
- DnsCache.cs
- EnumDataContract.cs
- HwndTarget.cs
- OptimizerPatterns.cs
- CodeGeneratorOptions.cs
- JsonFormatGeneratorStatics.cs
- EditorZoneBase.cs
- RequestCachePolicyConverter.cs
- TextSearch.cs