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
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SignedXml.cs
- ZipIOLocalFileBlock.cs
- ImageMetadata.cs
- NativeMethods.cs
- TypedElement.cs
- CodeEventReferenceExpression.cs
- WebPartConnectionsDisconnectVerb.cs
- DrawListViewSubItemEventArgs.cs
- CultureNotFoundException.cs
- OracleDataAdapter.cs
- Validator.cs
- NameSpaceEvent.cs
- TextEditorTyping.cs
- HttpPostProtocolImporter.cs
- LinkTarget.cs
- IpcClientChannel.cs
- SqlHelper.cs
- WindowsContainer.cs
- AttributeConverter.cs
- ValidationErrorEventArgs.cs
- Debug.cs
- XmlUtil.cs
- ConsoleEntryPoint.cs
- DataList.cs
- DataServiceHostFactory.cs
- StylusButtonEventArgs.cs
- MembershipSection.cs
- ResponseStream.cs
- XmlSchemaAttribute.cs
- SoapMessage.cs
- Decimal.cs
- CodeExporter.cs
- Queue.cs
- MediaPlayerState.cs
- FormatterConverter.cs
- ControlCollection.cs
- FileDialogCustomPlace.cs
- StorageMappingItemLoader.cs
- EditorZone.cs
- DynamicRendererThreadManager.cs
- EmptyReadOnlyDictionaryInternal.cs
- ContextStaticAttribute.cs
- DiagnosticsConfiguration.cs
- ComplexTypeEmitter.cs
- FormViewModeEventArgs.cs
- Msec.cs
- DataTableCollection.cs
- PropertyItemInternal.cs
- COM2Enum.cs
- RMEnrollmentPage1.cs
- Matrix3DConverter.cs
- XmlSortKey.cs
- XmlAttributeCollection.cs
- NativeCompoundFileAPIs.cs
- oledbmetadatacolumnnames.cs
- HMACSHA384.cs
- Transform.cs
- HwndTarget.cs
- DiffuseMaterial.cs
- OleDbSchemaGuid.cs
- SafeNativeMethods.cs
- Hex.cs
- NamespaceCollection.cs
- GeometryHitTestResult.cs
- DynamicRenderer.cs
- DataKey.cs
- ScaleTransform3D.cs
- VirtualDirectoryMappingCollection.cs
- RenderData.cs
- ListChangedEventArgs.cs
- FontCacheUtil.cs
- CounterCreationDataConverter.cs
- DebuggerAttributes.cs
- FieldToken.cs
- BaseTemplateParser.cs
- Panel.cs
- BulletChrome.cs
- SHA512Managed.cs
- FileUtil.cs
- TextElementEnumerator.cs
- DataExpression.cs
- TracedNativeMethods.cs
- ColorConvertedBitmap.cs
- TextEffect.cs
- Decoder.cs
- PluralizationService.cs
- DemultiplexingClientMessageFormatter.cs
- EmissiveMaterial.cs
- RSAPKCS1KeyExchangeFormatter.cs
- WebPartTransformer.cs
- FixedSOMTableCell.cs
- AllMembershipCondition.cs
- FrugalList.cs
- DelegatedStream.cs
- FileAuthorizationModule.cs
- ProtocolsConfigurationEntry.cs
- DataSourceDesigner.cs
- latinshape.cs
- ProxySimple.cs
- TextEditorCharacters.cs