Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- NativeActivity.cs
- ConcurrentQueue.cs
- SafeTokenHandle.cs
- ObjectItemAttributeAssemblyLoader.cs
- Selector.cs
- FixedSOMTableRow.cs
- SolidColorBrush.cs
- ProxySimple.cs
- NamespaceQuery.cs
- MimeFormatExtensions.cs
- ItemChangedEventArgs.cs
- PackWebResponse.cs
- TokenBasedSetEnumerator.cs
- XhtmlTextWriter.cs
- ResourceDescriptionAttribute.cs
- VBCodeProvider.cs
- EntityStoreSchemaGenerator.cs
- DocumentSequenceHighlightLayer.cs
- CacheManager.cs
- WebPartMinimizeVerb.cs
- MessageSecurityOverHttp.cs
- JournalEntryStack.cs
- BuildResult.cs
- InternalTypeHelper.cs
- WCFServiceClientProxyGenerator.cs
- webeventbuffer.cs
- TextFragmentEngine.cs
- ValueTypeFixupInfo.cs
- ContentWrapperAttribute.cs
- ObjectContext.cs
- SystemThemeKey.cs
- RelationshipConverter.cs
- AsymmetricKeyExchangeDeformatter.cs
- ConnectionStringsExpressionBuilder.cs
- ClientTarget.cs
- PlacementWorkspace.cs
- StylusPointPropertyInfo.cs
- TableLayoutSettings.cs
- CodeAttachEventStatement.cs
- QueueProcessor.cs
- KeyProperty.cs
- Image.cs
- DataViewSettingCollection.cs
- DispatcherHookEventArgs.cs
- AutoCompleteStringCollection.cs
- MetadataItem.cs
- formatstringdialog.cs
- BinaryConverter.cs
- HttpException.cs
- ResizeGrip.cs
- ItemPager.cs
- MouseEvent.cs
- AmbientLight.cs
- RequestCacheValidator.cs
- ReliabilityContractAttribute.cs
- ScaleTransform3D.cs
- SqlUtils.cs
- DetailsViewRowCollection.cs
- DbConnectionOptions.cs
- ElementNotAvailableException.cs
- _ShellExpression.cs
- DefaultWorkflowTransactionService.cs
- TextLine.cs
- BitmapScalingModeValidation.cs
- IDReferencePropertyAttribute.cs
- _BaseOverlappedAsyncResult.cs
- _NetRes.cs
- WebHeaderCollection.cs
- HttpPostProtocolReflector.cs
- ApplicationInfo.cs
- PreProcessInputEventArgs.cs
- WinFormsComponentEditor.cs
- MailWriter.cs
- WindowExtensionMethods.cs
- _BaseOverlappedAsyncResult.cs
- DataGrid.cs
- PriorityChain.cs
- Run.cs
- IISMapPath.cs
- EventHandlersDesigner.cs
- ConfigurationSectionCollection.cs
- Directory.cs
- AttributeProviderAttribute.cs
- AutomationPropertyInfo.cs
- _SslSessionsCache.cs
- Variant.cs
- TemplateColumn.cs
- DataServiceContext.cs
- TimeoutConverter.cs
- HelpFileFileNameEditor.cs
- TextEditorSelection.cs
- MyContact.cs
- SslStreamSecurityElement.cs
- DataException.cs
- MetadataWorkspace.cs
- RestHandlerFactory.cs
- DrawingGroup.cs
- ErrorWrapper.cs
- SafeNativeMethods.cs
- SqlFileStream.cs