Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- ProviderMetadataCachedInformation.cs
- AuthStoreRoleProvider.cs
- Parser.cs
- SetIterators.cs
- TextModifierScope.cs
- ToolStripPanelCell.cs
- CommandHelper.cs
- Asn1IntegerConverter.cs
- RuleInfoComparer.cs
- SignerInfo.cs
- LineUtil.cs
- ComponentChangedEvent.cs
- PointAnimationUsingKeyFrames.cs
- TrustLevelCollection.cs
- X500Name.cs
- TimeSpan.cs
- ChannelServices.cs
- FlowPosition.cs
- ControlDesigner.cs
- RectangleGeometry.cs
- UnsettableComboBox.cs
- SupportsEventValidationAttribute.cs
- FileStream.cs
- XmlTextReader.cs
- LifetimeServices.cs
- CompilationAssemblyInstallComponent.cs
- DrawItemEvent.cs
- DrawingBrush.cs
- FontWeight.cs
- ErrorFormatterPage.cs
- ACL.cs
- XmlSchemaImporter.cs
- InputMethodStateTypeInfo.cs
- DataKey.cs
- Int64KeyFrameCollection.cs
- Stopwatch.cs
- TypeReference.cs
- DrawingAttributeSerializer.cs
- SQLBoolean.cs
- SpellerError.cs
- SoapSchemaExporter.cs
- BuildDependencySet.cs
- loginstatus.cs
- AnnotationComponentChooser.cs
- Delegate.cs
- CopyNamespacesAction.cs
- Parser.cs
- Graph.cs
- SafeCertificateStore.cs
- QilValidationVisitor.cs
- EncodingInfo.cs
- HtmlEmptyTagControlBuilder.cs
- RIPEMD160.cs
- SerializationObjectManager.cs
- FastPropertyAccessor.cs
- InterleavedZipPartStream.cs
- StyleTypedPropertyAttribute.cs
- ContainerActivationHelper.cs
- TraceHwndHost.cs
- TypeUsageBuilder.cs
- CharacterBuffer.cs
- CommandID.cs
- TableRowCollection.cs
- Font.cs
- CollectionChangeEventArgs.cs
- ContentPresenter.cs
- DataViewSetting.cs
- ToolStripItemTextRenderEventArgs.cs
- ActivityContext.cs
- HandlerFactoryWrapper.cs
- Compiler.cs
- NetworkInterface.cs
- Funcletizer.cs
- FixedSOMPageConstructor.cs
- AssemblyCollection.cs
- TextTreeText.cs
- DesignRelationCollection.cs
- BufferAllocator.cs
- ValidationHelper.cs
- RewritingSimplifier.cs
- login.cs
- Adorner.cs
- StringFunctions.cs
- AtomicFile.cs
- BaseCollection.cs
- SqlMethodAttribute.cs
- TemplateBaseAction.cs
- PropVariant.cs
- ParsedRoute.cs
- WpfKnownTypeInvoker.cs
- CanonicalFormWriter.cs
- Facet.cs
- TitleStyle.cs
- DateTimeUtil.cs
- BulletedList.cs
- LoggedException.cs
- WebConfigurationHost.cs
- SQLInt16Storage.cs
- ListDictionaryInternal.cs
- WebCategoryAttribute.cs