Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataEntity / System / Data / Common / Utils / ThreadSafeList.cs / 1 / ThreadSafeList.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System.Collections.Generic; using System.Threading; namespace System.Data.Common.Utils { internal sealed class ThreadSafeList: IList { private readonly ReaderWriterLockSlim _lock; private List _list; internal ThreadSafeList() { _list = new List (); _lock = new ReaderWriterLockSlim(); } public int Count { get { _lock.EnterReadLock(); int count; try { count = _list.Count; } finally { _lock.ExitReadLock(); } return count; } } public void Add(T item) { _lock.EnterWriteLock(); try { _list.Add(item); } finally { _lock.ExitWriteLock(); } } public T this[int index] { get { _lock.EnterReadLock(); T result; try { result = _list[index]; } finally { _lock.ExitReadLock(); } return result; } set { _lock.EnterWriteLock(); try { _list[index] = value; } finally { _lock.ExitWriteLock(); } } } public bool IsReadOnly { get { return false; } } public int IndexOf(T item) { _lock.EnterReadLock(); int result; try { result = _list.IndexOf(item); } finally { _lock.ExitReadLock(); } return result; } public void Insert(int index, T item) { _lock.EnterWriteLock(); try { _list.Insert(index, item); } finally { _lock.ExitWriteLock(); } } public void RemoveAt(int index) { _lock.EnterWriteLock(); try { _list.RemoveAt(index); } finally { _lock.ExitWriteLock(); } } public void Clear() { _lock.EnterWriteLock(); try { _list.Clear(); } finally { _lock.ExitWriteLock(); } } public bool Contains(T item) { _lock.EnterReadLock(); bool result; try { result = _list.Contains(item); } finally { _lock.ExitReadLock(); } return result; } public void CopyTo(T[] array, int arrayIndex) { _lock.EnterWriteLock(); try { _list.CopyTo(array, arrayIndex); } finally { _lock.ExitWriteLock(); } } public bool Remove(T item) { _lock.EnterWriteLock(); bool result; try { result = _list.Remove(item); } finally { _lock.ExitWriteLock(); } return result; } public IEnumerator GetEnumerator() { _lock.EnterReadLock(); try { foreach (T value in _list) { yield return value; } } finally { _lock.ExitReadLock(); } } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return this.GetEnumerator(); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System.Collections.Generic; using System.Threading; namespace System.Data.Common.Utils { internal sealed class ThreadSafeList: IList { private readonly ReaderWriterLockSlim _lock; private List _list; internal ThreadSafeList() { _list = new List (); _lock = new ReaderWriterLockSlim(); } public int Count { get { _lock.EnterReadLock(); int count; try { count = _list.Count; } finally { _lock.ExitReadLock(); } return count; } } public void Add(T item) { _lock.EnterWriteLock(); try { _list.Add(item); } finally { _lock.ExitWriteLock(); } } public T this[int index] { get { _lock.EnterReadLock(); T result; try { result = _list[index]; } finally { _lock.ExitReadLock(); } return result; } set { _lock.EnterWriteLock(); try { _list[index] = value; } finally { _lock.ExitWriteLock(); } } } public bool IsReadOnly { get { return false; } } public int IndexOf(T item) { _lock.EnterReadLock(); int result; try { result = _list.IndexOf(item); } finally { _lock.ExitReadLock(); } return result; } public void Insert(int index, T item) { _lock.EnterWriteLock(); try { _list.Insert(index, item); } finally { _lock.ExitWriteLock(); } } public void RemoveAt(int index) { _lock.EnterWriteLock(); try { _list.RemoveAt(index); } finally { _lock.ExitWriteLock(); } } public void Clear() { _lock.EnterWriteLock(); try { _list.Clear(); } finally { _lock.ExitWriteLock(); } } public bool Contains(T item) { _lock.EnterReadLock(); bool result; try { result = _list.Contains(item); } finally { _lock.ExitReadLock(); } return result; } public void CopyTo(T[] array, int arrayIndex) { _lock.EnterWriteLock(); try { _list.CopyTo(array, arrayIndex); } finally { _lock.ExitWriteLock(); } } public bool Remove(T item) { _lock.EnterWriteLock(); bool result; try { result = _list.Remove(item); } finally { _lock.ExitWriteLock(); } return result; } public IEnumerator GetEnumerator() { _lock.EnterReadLock(); try { foreach (T value in _list) { yield return value; } } finally { _lock.ExitReadLock(); } } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return this.GetEnumerator(); } } } // 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
- HandlerWithFactory.cs
- ObjectFullSpanRewriter.cs
- ReadWriteObjectLock.cs
- AsymmetricKeyExchangeDeformatter.cs
- SpeakCompletedEventArgs.cs
- UIAgentRequest.cs
- SudsCommon.cs
- EventLogSession.cs
- AppDomainProtocolHandler.cs
- XmlSerializerSection.cs
- XmlTextAttribute.cs
- ToolBar.cs
- ItemMap.cs
- SingleStorage.cs
- Stroke.cs
- DeclaredTypeElement.cs
- Soap12ProtocolImporter.cs
- DynamicRendererThreadManager.cs
- FrameworkContextData.cs
- ExtendedTransformFactory.cs
- XmlDocumentFieldSchema.cs
- InheritanceRules.cs
- AdRotator.cs
- DataGridLinkButton.cs
- StopStoryboard.cs
- WorkflowDefinitionContext.cs
- HttpListenerTimeoutManager.cs
- ListView.cs
- RichTextBox.cs
- SoapAttributeAttribute.cs
- AsyncSerializedWorker.cs
- OrCondition.cs
- ColorContext.cs
- GridViewCancelEditEventArgs.cs
- Trace.cs
- WebPartConnectionsDisconnectVerb.cs
- DataServiceResponse.cs
- Transform.cs
- PriorityBinding.cs
- PrtCap_Builder.cs
- SqlDataSourceStatusEventArgs.cs
- CodeGenerator.cs
- FormCollection.cs
- KeyTimeConverter.cs
- ScriptingScriptResourceHandlerSection.cs
- CounterSetInstanceCounterDataSet.cs
- IApplicationTrustManager.cs
- CultureInfo.cs
- updatecommandorderer.cs
- FtpWebRequest.cs
- IriParsingElement.cs
- InlineUIContainer.cs
- SortedDictionary.cs
- WebUtil.cs
- MaskedTextProvider.cs
- SequenceNumber.cs
- CaseInsensitiveOrdinalStringComparer.cs
- GetTokenRequest.cs
- SiteMapNode.cs
- FtpWebRequest.cs
- TableProviderWrapper.cs
- ProtocolsConfigurationEntry.cs
- SQLMoneyStorage.cs
- DiscoveryServerProtocol.cs
- WindowsGraphicsCacheManager.cs
- ResourceDictionaryCollection.cs
- TimeoutStream.cs
- KoreanCalendar.cs
- BamlWriter.cs
- DataComponentMethodGenerator.cs
- TextCompositionManager.cs
- X509CertificateCollection.cs
- ObjectDataProvider.cs
- ViewCellRelation.cs
- MobileUserControl.cs
- TextTreeObjectNode.cs
- AmbiguousMatchException.cs
- XmlSchemaComplexContentRestriction.cs
- MsmqInputMessage.cs
- HttpPostProtocolReflector.cs
- CngKeyBlobFormat.cs
- DataGridViewControlCollection.cs
- LogLogRecordEnumerator.cs
- MatrixAnimationBase.cs
- CompoundFileReference.cs
- RefreshPropertiesAttribute.cs
- IsolationInterop.cs
- ListBindableAttribute.cs
- XmlBinaryReaderSession.cs
- Brush.cs
- BaseAppDomainProtocolHandler.cs
- ProjectedSlot.cs
- DLinqTableProvider.cs
- FlowLayout.cs
- TableLayoutCellPaintEventArgs.cs
- SplitContainerDesigner.cs
- SqlBinder.cs
- ResourcePool.cs
- DataGridAutomationPeer.cs
- UdpDiscoveryEndpointProvider.cs