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
- GenericEnumConverter.cs
- XmlQueryRuntime.cs
- DirectoryInfo.cs
- OptimalBreakSession.cs
- ItemType.cs
- XmlSchemaObjectTable.cs
- ItemsChangedEventArgs.cs
- COM2ComponentEditor.cs
- GcSettings.cs
- ClassicBorderDecorator.cs
- DoubleKeyFrameCollection.cs
- DEREncoding.cs
- PassportIdentity.cs
- WebBaseEventKeyComparer.cs
- CqlErrorHelper.cs
- SchemaType.cs
- TraceSource.cs
- TaskExtensions.cs
- BindingParameterCollection.cs
- TagMapInfo.cs
- WorkingDirectoryEditor.cs
- Condition.cs
- AutomationPeer.cs
- VisemeEventArgs.cs
- Matrix3DStack.cs
- SemanticAnalyzer.cs
- EdmPropertyAttribute.cs
- FormatterServices.cs
- ClientProxyGenerator.cs
- DataSet.cs
- MetadataArtifactLoaderComposite.cs
- WriteTimeStream.cs
- SynchronizedPool.cs
- SemanticValue.cs
- DataBoundLiteralControl.cs
- EntityDataSourceDataSelection.cs
- TextBlock.cs
- DataGridViewRowCollection.cs
- Int32Animation.cs
- HtmlForm.cs
- _StreamFramer.cs
- FactoryMaker.cs
- XmlWriterTraceListener.cs
- TreeViewImageKeyConverter.cs
- InputScope.cs
- TemplateXamlParser.cs
- TableLayoutPanelDesigner.cs
- RuleValidation.cs
- ReadOnlyHierarchicalDataSourceView.cs
- MediaPlayerState.cs
- RTLAwareMessageBox.cs
- RectangleHotSpot.cs
- RegexParser.cs
- OptimalTextSource.cs
- XmlWrappingReader.cs
- JumpTask.cs
- DelegateHelpers.cs
- XmlSchemaParticle.cs
- RoleBoolean.cs
- Boolean.cs
- EdmTypeAttribute.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- Icon.cs
- XmlCustomFormatter.cs
- VersionedStream.cs
- XmlNodeWriter.cs
- AtomPub10ServiceDocumentFormatter.cs
- Empty.cs
- TreeNodeCollection.cs
- IIS7UserPrincipal.cs
- Animatable.cs
- BitmapMetadata.cs
- MatrixTransform3D.cs
- TextEffectResolver.cs
- ObjectIDGenerator.cs
- RegistrationServices.cs
- SymmetricKeyWrap.cs
- PresentationSource.cs
- SqlException.cs
- WebPartZoneBaseDesigner.cs
- OleDbRowUpdatedEvent.cs
- PersistenceTypeAttribute.cs
- SyntaxCheck.cs
- MulticastNotSupportedException.cs
- VarInfo.cs
- EntityClassGenerator.cs
- InvokeMethodActivity.cs
- TableRow.cs
- XmlLangPropertyAttribute.cs
- ConstraintStruct.cs
- State.cs
- _OverlappedAsyncResult.cs
- _NegotiateClient.cs
- ObjectDataSourceChooseMethodsPanel.cs
- FixedDocumentSequencePaginator.cs
- MembershipUser.cs
- ConfigurationElement.cs
- MembershipPasswordException.cs
- ToolStripRenderEventArgs.cs
- WebPartEventArgs.cs