Code:
/ DotNET / DotNET / 8.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
- RIPEMD160.cs
- ToolbarAUtomationPeer.cs
- GridViewEditEventArgs.cs
- DashStyle.cs
- AutomationElementCollection.cs
- CacheEntry.cs
- _ConnectOverlappedAsyncResult.cs
- PasswordTextNavigator.cs
- DataGridRowClipboardEventArgs.cs
- NetworkInformationPermission.cs
- JumpTask.cs
- NumericExpr.cs
- CodeNamespaceCollection.cs
- HatchBrush.cs
- XmlDataLoader.cs
- RtfToken.cs
- DebugControllerThread.cs
- GenericAuthenticationEventArgs.cs
- WindowCollection.cs
- ResourcesChangeInfo.cs
- ColumnMapProcessor.cs
- AspProxy.cs
- SqlDataSourceStatusEventArgs.cs
- ViewKeyConstraint.cs
- SubMenuStyleCollection.cs
- FreezableDefaultValueFactory.cs
- DataQuery.cs
- ActivityExecutionContextCollection.cs
- SinglePhaseEnlistment.cs
- BitmapInitialize.cs
- FrameworkContextData.cs
- AxisAngleRotation3D.cs
- LinqMaximalSubtreeNominator.cs
- RequiredAttributeAttribute.cs
- ObjectManager.cs
- ProcessRequestAsyncResult.cs
- safesecurityhelperavalon.cs
- EventProperty.cs
- TextBoxBaseDesigner.cs
- DataService.cs
- SqlDependencyListener.cs
- WebScriptEnablingElement.cs
- Codec.cs
- ControlValuePropertyAttribute.cs
- DelegateHelpers.Generated.cs
- PointLight.cs
- LabelAutomationPeer.cs
- OracleEncoding.cs
- SelectQueryOperator.cs
- OdbcConnectionPoolProviderInfo.cs
- PortCache.cs
- PersonalizableAttribute.cs
- TableLayoutStyle.cs
- WsrmTraceRecord.cs
- UInt32.cs
- WebPartZoneBaseDesigner.cs
- ReachIDocumentPaginatorSerializer.cs
- DependencyPropertyChangedEventArgs.cs
- CustomValidator.cs
- WrapPanel.cs
- StructuralType.cs
- EntityViewGenerator.cs
- ImageCodecInfoPrivate.cs
- SQLResource.cs
- NativeMethodsOther.cs
- AspCompat.cs
- SymmetricCryptoHandle.cs
- DataMemberAttribute.cs
- documentsequencetextpointer.cs
- FormatException.cs
- AssociationTypeEmitter.cs
- AutoGeneratedField.cs
- Win32.cs
- AssemblyResourceLoader.cs
- ResourceManagerWrapper.cs
- NoneExcludedImageIndexConverter.cs
- Group.cs
- Partitioner.cs
- AnchoredBlock.cs
- ConnectionInterfaceCollection.cs
- RewritingValidator.cs
- MdImport.cs
- ClientSettingsSection.cs
- VectorValueSerializer.cs
- RoleExceptions.cs
- NavigationCommands.cs
- SqlErrorCollection.cs
- OutputCacheProfileCollection.cs
- DataKeyCollection.cs
- UpDownEvent.cs
- _AutoWebProxyScriptWrapper.cs
- RegistrationProxy.cs
- UIPermission.cs
- SapiAttributeParser.cs
- CustomAttribute.cs
- SerializableReadOnlyDictionary.cs
- XmlSchemaImporter.cs
- AudioStateChangedEventArgs.cs
- QilTernary.cs
- CompositionDesigner.cs