Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ModuleConfigurationInfo.cs
- ReadContentAsBinaryHelper.cs
- Triplet.cs
- CompositeFontParser.cs
- AttributeConverter.cs
- ToolStripContainerActionList.cs
- ToolTipService.cs
- SqlMethods.cs
- ListChangedEventArgs.cs
- PersonalizationProviderCollection.cs
- WizardStepBase.cs
- DiscoveryServiceExtension.cs
- PixelFormats.cs
- PathSegmentCollection.cs
- ScrollChrome.cs
- ConditionCollection.cs
- HttpRuntimeSection.cs
- TextRunCache.cs
- AsyncResult.cs
- OutputCacheProviderCollection.cs
- ToolStripInSituService.cs
- CodeConditionStatement.cs
- RadioButtonFlatAdapter.cs
- MetadataSource.cs
- RowSpanVector.cs
- SynchronizationValidator.cs
- securitycriticaldata.cs
- ColumnCollection.cs
- GZipUtils.cs
- WizardStepCollectionEditor.cs
- HtmlProps.cs
- WindowsRegion.cs
- XsltLoader.cs
- Camera.cs
- XmlNodeReader.cs
- TimestampInformation.cs
- ICollection.cs
- XNodeNavigator.cs
- VisualTreeHelper.cs
- StructuredTypeEmitter.cs
- TreeNodeSelectionProcessor.cs
- EntityTypeBase.cs
- SignedInfo.cs
- DotExpr.cs
- TitleStyle.cs
- SocketAddress.cs
- ImmComposition.cs
- ApplicationActivator.cs
- DataObject.cs
- TextEditorContextMenu.cs
- RegistryConfigurationProvider.cs
- DataGridViewColumnCollection.cs
- TableStyle.cs
- HtmlTableCellCollection.cs
- DataBoundControl.cs
- HtmlInputFile.cs
- ContainerUIElement3D.cs
- PropertyItem.cs
- LinearKeyFrames.cs
- SchemaAttDef.cs
- TextTreeRootNode.cs
- WorkflowInstance.cs
- VerificationException.cs
- DoubleAnimationClockResource.cs
- CustomErrorCollection.cs
- LiteralControl.cs
- XmlSchemaCompilationSettings.cs
- WebPartConnectionsConnectVerb.cs
- ArrayHelper.cs
- MimeParameter.cs
- Triangle.cs
- TextRangeEditLists.cs
- HttpClientProtocol.cs
- FontEmbeddingManager.cs
- MailHeaderInfo.cs
- LoginUtil.cs
- SecurityUniqueId.cs
- FixedHyperLink.cs
- FlowNode.cs
- UrlPath.cs
- SystemThemeKey.cs
- DbConnectionFactory.cs
- EventEntry.cs
- XamlTemplateSerializer.cs
- TextChangedEventArgs.cs
- ScrollData.cs
- Merger.cs
- DoubleLink.cs
- ListViewItemMouseHoverEvent.cs
- regiisutil.cs
- RectAnimationClockResource.cs
- MobileCategoryAttribute.cs
- TransformedBitmap.cs
- VirtualizedCellInfoCollection.cs
- RemotingAttributes.cs
- ToolStripItemClickedEventArgs.cs
- InsufficientMemoryException.cs
- X509IssuerSerialKeyIdentifierClause.cs
- HashLookup.cs
- IHttpResponseInternal.cs