Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Common / Utils / ThreadSafeList.cs / 1305376 / 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
- Button.cs
- ApplicationServicesHostFactory.cs
- ViewManager.cs
- WebPartExportVerb.cs
- ArgIterator.cs
- RequestUriProcessor.cs
- IconBitmapDecoder.cs
- MultipartContentParser.cs
- Size3DValueSerializer.cs
- ContractMapping.cs
- BooleanConverter.cs
- ExceptionHelpers.cs
- TemplatedAdorner.cs
- UrlPath.cs
- SessionStateUtil.cs
- BindingElementExtensionElement.cs
- OpCellTreeNode.cs
- VScrollProperties.cs
- TemplateLookupAction.cs
- Underline.cs
- SqlCommandBuilder.cs
- XmlSchemaAttribute.cs
- SqlNotificationEventArgs.cs
- ConfigurationManagerHelper.cs
- SafeNativeMethodsMilCoreApi.cs
- Exception.cs
- DesignerLoader.cs
- ControlBindingsConverter.cs
- ResourceExpressionEditor.cs
- FixedTextView.cs
- IEnumerable.cs
- ReadWriteObjectLock.cs
- CodeBinaryOperatorExpression.cs
- Visitor.cs
- _PooledStream.cs
- SqlUserDefinedTypeAttribute.cs
- SystemIPInterfaceStatistics.cs
- CompositeFontInfo.cs
- BinaryMethodMessage.cs
- GridLengthConverter.cs
- ConnectivityStatus.cs
- StyleModeStack.cs
- StorageSetMapping.cs
- FlowDocumentScrollViewer.cs
- XmlSchemaRedefine.cs
- Compress.cs
- ScrollBar.cs
- VBIdentifierName.cs
- InlineObject.cs
- Animatable.cs
- XmlILAnnotation.cs
- GeneralTransformGroup.cs
- DynamicField.cs
- TextOutput.cs
- VerificationAttribute.cs
- ConnectorSelectionGlyph.cs
- Parser.cs
- ThreadStartException.cs
- AnnotationHighlightLayer.cs
- RoleManagerModule.cs
- UpdateExpressionVisitor.cs
- SignedPkcs7.cs
- XmlQueryContext.cs
- HttpHandlerActionCollection.cs
- OleDbException.cs
- GenericWebPart.cs
- RewritingSimplifier.cs
- XPathNodeIterator.cs
- Color.cs
- ForceCopyBuildProvider.cs
- ProcessModule.cs
- QilReference.cs
- PaintValueEventArgs.cs
- _LocalDataStoreMgr.cs
- RequestStatusBarUpdateEventArgs.cs
- FunctionImportElement.cs
- SecurityPolicySection.cs
- IisTraceListener.cs
- TextStore.cs
- HtmlUtf8RawTextWriter.cs
- LiteralLink.cs
- TypeNameConverter.cs
- PreparingEnlistment.cs
- ThreadStateException.cs
- SyndicationDeserializer.cs
- PieceDirectory.cs
- Delegate.cs
- CodeBlockBuilder.cs
- EmissiveMaterial.cs
- Point3DCollectionValueSerializer.cs
- UnionExpr.cs
- LineBreak.cs
- WmlMobileTextWriter.cs
- Parameter.cs
- AssemblyBuilderData.cs
- HttpCapabilitiesEvaluator.cs
- ParameterBuilder.cs
- FormConverter.cs
- WindowsToolbarAsMenu.cs
- RuntimeResourceSet.cs