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
- PerformanceCounterPermissionEntry.cs
- NotifyParentPropertyAttribute.cs
- DesignerVerb.cs
- HtmlDocument.cs
- RelativeSource.cs
- EventDescriptor.cs
- ContextProperty.cs
- HwndSourceParameters.cs
- CompilerScope.cs
- TextParentUndoUnit.cs
- ManagementClass.cs
- CustomCategoryAttribute.cs
- PingReply.cs
- Command.cs
- SessionSwitchEventArgs.cs
- DropSource.cs
- DataGridViewColumnDesignTimeVisibleAttribute.cs
- FtpRequestCacheValidator.cs
- Style.cs
- Content.cs
- SynchronizedDisposablePool.cs
- SqlCacheDependencyDatabaseCollection.cs
- HasCopySemanticsAttribute.cs
- ParentUndoUnit.cs
- UserControlParser.cs
- UnsignedPublishLicense.cs
- DbConnectionStringBuilder.cs
- WindowsTitleBar.cs
- TreeNodeEventArgs.cs
- _NegotiateClient.cs
- XmlRootAttribute.cs
- ValidationSummary.cs
- StringValueConverter.cs
- BaseTemplatedMobileComponentEditor.cs
- HostingEnvironmentSection.cs
- BookmarkScopeInfo.cs
- SettingsBindableAttribute.cs
- BypassElementCollection.cs
- NotImplementedException.cs
- ObjectItemCachedAssemblyLoader.cs
- StackOverflowException.cs
- XmlArrayAttribute.cs
- TCPListener.cs
- TypeDependencyAttribute.cs
- Int16Storage.cs
- CustomErrorsSectionWrapper.cs
- WebAdminConfigurationHelper.cs
- XmlChoiceIdentifierAttribute.cs
- XPathSingletonIterator.cs
- WindowsListViewSubItem.cs
- NonParentingControl.cs
- DataBinder.cs
- MultiTrigger.cs
- clipboard.cs
- XsltLibrary.cs
- BitmapEffectDrawingContent.cs
- ServiceOperationWrapper.cs
- UpdatePanelTriggerCollection.cs
- SoapSchemaMember.cs
- HttpRuntime.cs
- FileDialogCustomPlacesCollection.cs
- LocalizedNameDescriptionPair.cs
- ControlIdConverter.cs
- EntityDataSourceDesignerHelper.cs
- CreateUserWizardStep.cs
- MessageBox.cs
- Label.cs
- AppliesToBehaviorDecisionTable.cs
- PolygonHotSpot.cs
- TextTreeRootTextBlock.cs
- XmlStringTable.cs
- BitmapSizeOptions.cs
- ToolStripContainerActionList.cs
- CursorConverter.cs
- ScheduleChanges.cs
- SspiWrapper.cs
- FileRegion.cs
- XmlAtomErrorReader.cs
- invalidudtexception.cs
- IndexedEnumerable.cs
- SecurityElementBase.cs
- CommandPlan.cs
- BinaryExpression.cs
- RootAction.cs
- SubMenuStyle.cs
- RuntimeCompatibilityAttribute.cs
- CompiledIdentityConstraint.cs
- GetPageCompletedEventArgs.cs
- FeatureSupport.cs
- MarshalDirectiveException.cs
- SqlFormatter.cs
- FileDialog.cs
- SoapAttributes.cs
- MatrixTransform.cs
- TrayIconDesigner.cs
- ColorContextHelper.cs
- WebBrowserSiteBase.cs
- ComponentEditorForm.cs
- StateItem.cs
- MessageDecoder.cs