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
- SpanIndex.cs
- CursorInteropHelper.cs
- EventPrivateKey.cs
- CalendarDay.cs
- PolyLineSegmentFigureLogic.cs
- ServicesUtilities.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- SqlDataSourceFilteringEventArgs.cs
- ClientScriptManager.cs
- PrintDialog.cs
- ActivitiesCollection.cs
- ImageAnimator.cs
- SspiHelper.cs
- MenuItemBinding.cs
- PanelContainerDesigner.cs
- StrongTypingException.cs
- Rijndael.cs
- BuildProvider.cs
- Environment.cs
- SmiEventSink.cs
- HyperLink.cs
- KeyPullup.cs
- Win32.cs
- XmlName.cs
- SQLInt64Storage.cs
- BitmapMetadataBlob.cs
- PermissionSetTriple.cs
- Deserializer.cs
- IOThreadTimer.cs
- ProjectedSlot.cs
- TiffBitmapEncoder.cs
- Misc.cs
- OutputWindow.cs
- BrowserCapabilitiesFactoryBase.cs
- StandardCommandToolStripMenuItem.cs
- PeerNameResolver.cs
- XmlHierarchyData.cs
- ForEachDesigner.xaml.cs
- HwndStylusInputProvider.cs
- InvalidAsynchronousStateException.cs
- ThaiBuddhistCalendar.cs
- Console.cs
- SqlDataSourceCache.cs
- RoutedPropertyChangedEventArgs.cs
- HtmlElement.cs
- CodeDOMUtility.cs
- ProcessModule.cs
- ImageUrlEditor.cs
- TableItemPattern.cs
- ValidationUtility.cs
- UInt32Storage.cs
- WebEventTraceProvider.cs
- VarInfo.cs
- Vector3DAnimationBase.cs
- ExcCanonicalXml.cs
- DBSqlParserTableCollection.cs
- DynamicQueryableWrapper.cs
- DataGridViewCellStyleConverter.cs
- Rule.cs
- FixedDSBuilder.cs
- NavigationFailedEventArgs.cs
- IFormattable.cs
- SymbolType.cs
- SafeArrayRankMismatchException.cs
- CommandEventArgs.cs
- XmlSchemaGroupRef.cs
- shaperfactory.cs
- CorrelationResolver.cs
- CompensateDesigner.cs
- BigInt.cs
- ValidatingReaderNodeData.cs
- GeneralTransform3DGroup.cs
- Int32AnimationUsingKeyFrames.cs
- ResourceAssociationTypeEnd.cs
- ExtendedPropertyCollection.cs
- OlePropertyStructs.cs
- AuthenticationService.cs
- SQLConvert.cs
- TextChangedEventArgs.cs
- MSAANativeProvider.cs
- RedirectionProxy.cs
- HtmlValidationSummaryAdapter.cs
- UnsafeNativeMethods.cs
- Expressions.cs
- SerializerDescriptor.cs
- TreeViewItem.cs
- HttpPostedFile.cs
- RoleService.cs
- EnumBuilder.cs
- HttpStreamXmlDictionaryReader.cs
- References.cs
- FaultException.cs
- UriSection.cs
- WmlLiteralTextAdapter.cs
- JpegBitmapEncoder.cs
- SessionPageStatePersister.cs
- ProviderConnectionPointCollection.cs
- WeakReferenceList.cs
- IOException.cs
- DocumentCollection.cs