Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Win32.cs
- ToolStrip.cs
- SqlBulkCopyColumnMapping.cs
- ClientApiGenerator.cs
- GraphicsContainer.cs
- InfoCardRSAPKCS1SignatureDeformatter.cs
- GeometryHitTestResult.cs
- HyperLinkColumn.cs
- ServiceHostingEnvironmentSection.cs
- SecUtil.cs
- Assembly.cs
- WebServiceFaultDesigner.cs
- ThreadExceptionEvent.cs
- ReaderWriterLockWrapper.cs
- PropertyConverter.cs
- SeparatorAutomationPeer.cs
- DataSourceGeneratorException.cs
- ComponentGlyph.cs
- NamespaceDecl.cs
- CommandManager.cs
- ItemType.cs
- sqlser.cs
- RemotingServices.cs
- SequenceDesigner.cs
- ApplyImportsAction.cs
- _TransmitFileOverlappedAsyncResult.cs
- AnnotationMap.cs
- SQLConvert.cs
- HandlerMappingMemo.cs
- UpdatePanelTrigger.cs
- XmlSchemas.cs
- SQLDecimal.cs
- DataObjectCopyingEventArgs.cs
- XPathQueryGenerator.cs
- AppDomainFactory.cs
- XmlDownloadManager.cs
- _NetworkingPerfCounters.cs
- SiteOfOriginPart.cs
- PlaceHolder.cs
- FormViewUpdateEventArgs.cs
- IsolatedStorageException.cs
- TrustManager.cs
- ListDictionaryInternal.cs
- HtmlContainerControl.cs
- DPTypeDescriptorContext.cs
- WaitHandleCannotBeOpenedException.cs
- Privilege.cs
- Error.cs
- CaseInsensitiveHashCodeProvider.cs
- DbSourceCommand.cs
- Size3DValueSerializer.cs
- ConfigXmlText.cs
- FieldInfo.cs
- StructuredTypeEmitter.cs
- Point3DConverter.cs
- SimpleTypesSurrogate.cs
- WrapPanel.cs
- Int64AnimationBase.cs
- MouseActionConverter.cs
- RestClientProxyHandler.cs
- TypeTypeConverter.cs
- PeerName.cs
- HtmlEncodedRawTextWriter.cs
- InternalMappingException.cs
- ViewBox.cs
- KeyInfo.cs
- ObjectSecurity.cs
- TextEffect.cs
- SafeArrayRankMismatchException.cs
- FontResourceCache.cs
- BlobPersonalizationState.cs
- SubqueryRules.cs
- EntityParameterCollection.cs
- GC.cs
- OracleNumber.cs
- StylusPlugin.cs
- QuadraticBezierSegment.cs
- DictionaryKeyPropertyAttribute.cs
- CacheDependency.cs
- WindowsSecurityTokenAuthenticator.cs
- CategoryAttribute.cs
- WebPartCancelEventArgs.cs
- CaseStatement.cs
- ProviderMetadataCachedInformation.cs
- VisualTarget.cs
- ScrollChrome.cs
- Binding.cs
- TcpChannelFactory.cs
- CompilerGlobalScopeAttribute.cs
- Pointer.cs
- Group.cs
- SID.cs
- PanelStyle.cs
- OperationResponse.cs
- ContractCodeDomInfo.cs
- GridViewRowCollection.cs
- WindowsRebar.cs
- PngBitmapEncoder.cs
- documentsequencetextpointer.cs
- FlowLayoutPanel.cs