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
- TextBox.cs
- ContentHostHelper.cs
- NamedPermissionSet.cs
- CompilerCollection.cs
- CommentAction.cs
- HostProtectionException.cs
- SlipBehavior.cs
- XmlSchemaAttributeGroupRef.cs
- ObfuscationAttribute.cs
- SafeUserTokenHandle.cs
- Column.cs
- HashFinalRequest.cs
- ChannelFactory.cs
- ProcessInfo.cs
- Activator.cs
- ObjectListDesigner.cs
- DataControlButton.cs
- CompilerCollection.cs
- WeakHashtable.cs
- CodeMemberField.cs
- BinHexEncoder.cs
- CLSCompliantAttribute.cs
- MultiDataTrigger.cs
- TrackingMemoryStreamFactory.cs
- DispatcherTimer.cs
- UnsignedPublishLicense.cs
- followingsibling.cs
- DataPagerFieldCollection.cs
- ConnectionPointCookie.cs
- TrackingConditionCollection.cs
- shaperfactory.cs
- ResourceSet.cs
- UiaCoreApi.cs
- Utils.cs
- MetadataPropertyvalue.cs
- WorkflowEnvironment.cs
- FlatButtonAppearance.cs
- ListItemParagraph.cs
- ChannelSinkStacks.cs
- PerfService.cs
- ConfigurationLocationCollection.cs
- Separator.cs
- MetaColumn.cs
- MenuBase.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- GeometryDrawing.cs
- DataReaderContainer.cs
- XNodeValidator.cs
- TextElementEnumerator.cs
- WebPartConnectionsDisconnectVerb.cs
- OleStrCAMarshaler.cs
- FixedSOMContainer.cs
- EncoderFallback.cs
- MembershipPasswordException.cs
- LockRecoveryTask.cs
- DataGridViewControlCollection.cs
- KeyInterop.cs
- ListItemsCollectionEditor.cs
- TaskFormBase.cs
- RSAOAEPKeyExchangeFormatter.cs
- SqlDataReaderSmi.cs
- UpdatePanelControlTrigger.cs
- CodeStatement.cs
- GetLedgerEntryForRecipientRequest.cs
- XsltException.cs
- LinkClickEvent.cs
- ProgressBar.cs
- PropertyGroupDescription.cs
- DataMisalignedException.cs
- PropertyConverter.cs
- SerializerProvider.cs
- SubpageParaClient.cs
- StyleSelector.cs
- StreamInfo.cs
- StringBuilder.cs
- Error.cs
- RemotingService.cs
- CompilerLocalReference.cs
- RuntimeIdentifierPropertyAttribute.cs
- XmlSchemaAttributeGroupRef.cs
- GroupItemAutomationPeer.cs
- XpsPackagingPolicy.cs
- HttpBufferlessInputStream.cs
- ServiceContractListItem.cs
- SiteMapDataSource.cs
- PerfCounterSection.cs
- ObjectTag.cs
- SystemIcmpV4Statistics.cs
- DefaultParameterValueAttribute.cs
- ListCollectionView.cs
- SchemaTableColumn.cs
- TextMessageEncodingBindingElement.cs
- X509KeyIdentifierClauseType.cs
- Roles.cs
- EventLogPermissionEntry.cs
- LocatorPartList.cs
- DataSourceCacheDurationConverter.cs
- SoapAttributeOverrides.cs
- CompositeActivityCodeGenerator.cs
- FileAuthorizationModule.cs