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
- BitStack.cs
- Inflater.cs
- PropertyKey.cs
- XmlObjectSerializerReadContextComplex.cs
- DbConnectionPool.cs
- UpdateExpressionVisitor.cs
- SafeLocalAllocation.cs
- LinqDataSourceDeleteEventArgs.cs
- SoapAttributeOverrides.cs
- GuidTagList.cs
- elementinformation.cs
- HtmlInputImage.cs
- FontNameEditor.cs
- DateTimeValueSerializerContext.cs
- Intellisense.cs
- ServiceXNameTypeConverter.cs
- ComponentEditorPage.cs
- Vector3DCollectionConverter.cs
- IfJoinedCondition.cs
- X509CertificateValidator.cs
- Number.cs
- ArrangedElementCollection.cs
- BamlLocalizabilityResolver.cs
- BStrWrapper.cs
- ParameterElementCollection.cs
- SqlBinder.cs
- PathSegment.cs
- BaseCollection.cs
- ThreadAbortException.cs
- AssemblyLoader.cs
- ToolStripItemBehavior.cs
- XmlNavigatorStack.cs
- MetabaseSettings.cs
- Label.cs
- SByte.cs
- CompositionAdorner.cs
- OutputCacheEntry.cs
- NumberSubstitution.cs
- Stroke.cs
- MetaColumn.cs
- MSHTMLHostUtil.cs
- ZoneButton.cs
- BaseTemplatedMobileComponentEditor.cs
- MemberPath.cs
- OrderedDictionaryStateHelper.cs
- XmlILConstructAnalyzer.cs
- ManagedWndProcTracker.cs
- StylusSystemGestureEventArgs.cs
- TdsEnums.cs
- PointAnimationClockResource.cs
- OdbcConnectionOpen.cs
- ColorAnimationBase.cs
- ClientScriptManager.cs
- UriSection.cs
- PrintPreviewDialog.cs
- SeekStoryboard.cs
- SafeNativeMethods.cs
- HealthMonitoringSection.cs
- WebEncodingValidatorAttribute.cs
- C14NUtil.cs
- ProfileGroupSettings.cs
- DomNameTable.cs
- SSmlParser.cs
- TextEditorSelection.cs
- SafeCloseHandleCritical.cs
- PackageProperties.cs
- Switch.cs
- ActiveXSite.cs
- XmlDataProvider.cs
- MatrixUtil.cs
- ResourceDescriptionAttribute.cs
- ValueExpressions.cs
- AppDomainInstanceProvider.cs
- ScrollPatternIdentifiers.cs
- XmlCompatibilityReader.cs
- ContextMenuStrip.cs
- FixedSOMTableRow.cs
- XsltException.cs
- DetailsViewInsertEventArgs.cs
- basemetadatamappingvisitor.cs
- RegionIterator.cs
- UserCancellationException.cs
- cache.cs
- ActiveXHelper.cs
- ZipIOExtraFieldPaddingElement.cs
- ControlUtil.cs
- ObjectSet.cs
- SiteMapPath.cs
- MSHTMLHost.cs
- GenericAuthenticationEventArgs.cs
- ClientRuntimeConfig.cs
- PersonalizationDictionary.cs
- CompositeFontFamily.cs
- MD5Cng.cs
- DataColumnMappingCollection.cs
- UIElementParagraph.cs
- OracleLob.cs
- BooleanExpr.cs
- ListSourceHelper.cs
- CodeDelegateCreateExpression.cs