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
- GB18030Encoding.cs
- LayoutUtils.cs
- RedBlackList.cs
- DataGridViewTextBoxEditingControl.cs
- Model3D.cs
- TouchDevice.cs
- DbConnectionOptions.cs
- ConstantProjectedSlot.cs
- namescope.cs
- embossbitmapeffect.cs
- HttpPostClientProtocol.cs
- Misc.cs
- WindowsFormsHostPropertyMap.cs
- DbDataReader.cs
- DataRowChangeEvent.cs
- WebPartRestoreVerb.cs
- COM2PropertyDescriptor.cs
- updateconfighost.cs
- ZoomPercentageConverter.cs
- SecurityPolicySection.cs
- HTTPNotFoundHandler.cs
- StatusBarDrawItemEvent.cs
- LogEntryHeaderv1Deserializer.cs
- PermissionSetEnumerator.cs
- KeyedCollection.cs
- URLBuilder.cs
- AuthorizationPolicyTypeElementCollection.cs
- StorageEntitySetMapping.cs
- translator.cs
- SocketElement.cs
- StylusPointProperty.cs
- ValueUtilsSmi.cs
- NativeMethods.cs
- HttpRuntime.cs
- CacheDependency.cs
- SocketStream.cs
- CustomSignedXml.cs
- SqlGatherConsumedAliases.cs
- XmlSchemaSimpleContentExtension.cs
- DropShadowBitmapEffect.cs
- IgnoreFileBuildProvider.cs
- SHA1CryptoServiceProvider.cs
- StorageFunctionMapping.cs
- WorkflowApplicationAbortedEventArgs.cs
- SettingsProperty.cs
- OdbcConnectionPoolProviderInfo.cs
- PriorityQueue.cs
- OdbcConnectionPoolProviderInfo.cs
- DataBinding.cs
- DelayDesigner.cs
- DBSqlParserColumn.cs
- XmlIlVisitor.cs
- LocationInfo.cs
- XmlRootAttribute.cs
- WebPartMenu.cs
- Enumerable.cs
- TargetParameterCountException.cs
- WindowsEditBox.cs
- ProgressBarAutomationPeer.cs
- ResourcePermissionBase.cs
- MenuAdapter.cs
- Grant.cs
- LinqToSqlWrapper.cs
- Stackframe.cs
- MenuItemStyleCollection.cs
- ResourceManagerWrapper.cs
- CurrentChangingEventManager.cs
- MultiByteCodec.cs
- UnsignedPublishLicense.cs
- NamedPipeTransportElement.cs
- SubqueryRules.cs
- Win32Native.cs
- VisualStyleInformation.cs
- _AutoWebProxyScriptHelper.cs
- DataColumnSelectionConverter.cs
- StateMachineSubscription.cs
- FontStyle.cs
- SharedPersonalizationStateInfo.cs
- OleDbTransaction.cs
- EnlistmentTraceIdentifier.cs
- DataServiceHost.cs
- SafeSerializationManager.cs
- PartitionerQueryOperator.cs
- BackgroundWorker.cs
- ConfigXmlWhitespace.cs
- ScrollViewer.cs
- SoapFault.cs
- MetadataHelper.cs
- ElementUtil.cs
- GetPageNumberCompletedEventArgs.cs
- DocumentStream.cs
- cookie.cs
- DataGridViewControlCollection.cs
- PageThemeParser.cs
- ListViewPagedDataSource.cs
- DataGridViewUtilities.cs
- RegexCode.cs
- MetaModel.cs
- Stacktrace.cs
- SqlXmlStorage.cs