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
- ResourceLoader.cs
- WebServiceParameterData.cs
- HealthMonitoringSection.cs
- PathNode.cs
- BrowserCapabilitiesFactory.cs
- Attributes.cs
- _ListenerRequestStream.cs
- SimpleHandlerFactory.cs
- MappedMetaModel.cs
- NonSerializedAttribute.cs
- TransactionBehavior.cs
- EntityProviderFactory.cs
- Link.cs
- Base64Encoder.cs
- ExternalDataExchangeService.cs
- ParseChildrenAsPropertiesAttribute.cs
- ChannelHandler.cs
- ContentElementAutomationPeer.cs
- ModuleBuilderData.cs
- SAPIEngineTypes.cs
- InputMethodStateTypeInfo.cs
- UnknownBitmapEncoder.cs
- TableDetailsRow.cs
- XmlSchemaParticle.cs
- CellLabel.cs
- DataGridRow.cs
- SafeNativeMethodsMilCoreApi.cs
- AssemblyUtil.cs
- DbMetaDataColumnNames.cs
- PhysicalFontFamily.cs
- RowTypeElement.cs
- RelatedImageListAttribute.cs
- ReadOnlyDataSourceView.cs
- CacheModeValueSerializer.cs
- TextServicesHost.cs
- JoinSymbol.cs
- PrintDialog.cs
- BrowserTree.cs
- TypedTableBaseExtensions.cs
- SqlFactory.cs
- NativeStructs.cs
- MarshalDirectiveException.cs
- ControlParser.cs
- PeerTransportBindingElement.cs
- PresentationAppDomainManager.cs
- XmlSchema.cs
- LinkedList.cs
- SEHException.cs
- ProfileEventArgs.cs
- ColorContext.cs
- NgenServicingAttributes.cs
- ProtocolImporter.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- EntityWrapperFactory.cs
- HitTestDrawingContextWalker.cs
- AsyncPostBackErrorEventArgs.cs
- IdentifierService.cs
- InkCanvas.cs
- SQLDecimalStorage.cs
- AppDomainProtocolHandler.cs
- DesignerForm.cs
- WebBrowserNavigatedEventHandler.cs
- TemplatedAdorner.cs
- DataGridParentRows.cs
- AudioFileOut.cs
- SmtpCommands.cs
- HeaderCollection.cs
- DirectoryInfo.cs
- ShaderEffect.cs
- UnknownBitmapEncoder.cs
- WindowsAltTab.cs
- EventWaitHandle.cs
- Dictionary.cs
- HScrollBar.cs
- altserialization.cs
- FormatVersion.cs
- HostProtectionPermission.cs
- PTConverter.cs
- CodeParameterDeclarationExpressionCollection.cs
- StrokeNodeOperations2.cs
- StyleSelector.cs
- NeutralResourcesLanguageAttribute.cs
- SqlTypesSchemaImporter.cs
- x509store.cs
- EventSetter.cs
- ToolStripControlHost.cs
- ProfileGroupSettings.cs
- CriticalFinalizerObject.cs
- EditorPart.cs
- TreeNodeStyleCollection.cs
- RelationshipFixer.cs
- DataContext.cs
- ToolBarOverflowPanel.cs
- UncommonField.cs
- HttpStreamMessageEncoderFactory.cs
- ArcSegment.cs
- FilterElement.cs
- BinaryMethodMessage.cs
- EventLogRecord.cs
- TemplateKey.cs