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
- ValidationErrorEventArgs.cs
- TdsParserStateObject.cs
- ApplicationSecurityInfo.cs
- StylusDevice.cs
- DispatcherFrame.cs
- DataGridItem.cs
- EditorAttribute.cs
- SQLString.cs
- ModuleElement.cs
- HtmlElementErrorEventArgs.cs
- TaskFormBase.cs
- SqlGenericUtil.cs
- SHA512Managed.cs
- DSACryptoServiceProvider.cs
- GZipStream.cs
- ManagementQuery.cs
- PerformanceCounterPermissionEntry.cs
- HelpEvent.cs
- BinHexDecoder.cs
- ArrayList.cs
- BookmarkOptionsHelper.cs
- LogicalExpr.cs
- GenerateTemporaryAssemblyTask.cs
- NativeMethods.cs
- ViewEvent.cs
- MarkerProperties.cs
- ProfileManager.cs
- ResetableIterator.cs
- BamlMapTable.cs
- IPEndPoint.cs
- WorkflowDefinitionContext.cs
- AssemblyCollection.cs
- OdbcConnectionFactory.cs
- Padding.cs
- RedirectionProxy.cs
- GetResponse.cs
- DataGridViewCellStyle.cs
- assertwrapper.cs
- SmtpNetworkElement.cs
- HtmlElementEventArgs.cs
- AttachedPropertyBrowsableAttribute.cs
- PageRequestManager.cs
- SessionPageStatePersister.cs
- ManifestResourceInfo.cs
- XmlReflectionMember.cs
- PolyLineSegment.cs
- SplineQuaternionKeyFrame.cs
- FixedDocument.cs
- LineVisual.cs
- UIElementCollection.cs
- TrackingServices.cs
- TextParaLineResult.cs
- WizardPanelChangingEventArgs.cs
- CodeDefaultValueExpression.cs
- PropertyStore.cs
- AddInSegmentDirectoryNotFoundException.cs
- Events.cs
- SqlExpander.cs
- DataControlButton.cs
- DbMetaDataColumnNames.cs
- DataTemplate.cs
- LambdaCompiler.Unary.cs
- ArrowControl.xaml.cs
- RegexRunnerFactory.cs
- ConvertEvent.cs
- AnimationClockResource.cs
- MediaContextNotificationWindow.cs
- WebConfigurationManager.cs
- GeneralTransform3D.cs
- EntityViewGenerationConstants.cs
- BaseHashHelper.cs
- SafeUserTokenHandle.cs
- DateTimeOffsetAdapter.cs
- HttpCacheVary.cs
- XamlToRtfWriter.cs
- JulianCalendar.cs
- PlaceHolder.cs
- ErrorCodes.cs
- HtmlSelectionListAdapter.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- ContentOnlyMessage.cs
- ToolboxItemFilterAttribute.cs
- PropertyChangedEventManager.cs
- TypeRestriction.cs
- ToolBarButton.cs
- AccessibleObject.cs
- GridViewCommandEventArgs.cs
- ListItemCollection.cs
- ListViewInsertedEventArgs.cs
- ValidatorCompatibilityHelper.cs
- StrokeCollection.cs
- ProtocolsConfiguration.cs
- BinarySecretKeyIdentifierClause.cs
- CqlIdentifiers.cs
- SettingsProperty.cs
- MetadataArtifactLoaderResource.cs
- Clipboard.cs
- DataKeyCollection.cs
- PackageProperties.cs
- DesignColumn.cs