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
- ListSourceHelper.cs
- ApplicationCommands.cs
- ObjectManager.cs
- WebPartConnection.cs
- followingsibling.cs
- OutputCacheSettings.cs
- DataBindingCollection.cs
- SqlRemoveConstantOrderBy.cs
- DataGridViewComboBoxEditingControl.cs
- ReaderContextStackData.cs
- DbConnectionPool.cs
- Activation.cs
- CredentialCache.cs
- ContextStaticAttribute.cs
- StringCollection.cs
- ProfilePropertyNameValidator.cs
- ConfigurationStrings.cs
- UnauthorizedWebPart.cs
- InputLanguageEventArgs.cs
- HuffModule.cs
- ReversePositionQuery.cs
- ClipboardData.cs
- TableAutomationPeer.cs
- UpDownBase.cs
- DataBoundLiteralControl.cs
- HttpFileCollection.cs
- UnsafeNativeMethodsMilCoreApi.cs
- PartialArray.cs
- WebResponse.cs
- OneWayBindingElement.cs
- OrderByQueryOptionExpression.cs
- UrlPath.cs
- DirectoryRedirect.cs
- IndexOutOfRangeException.cs
- HttpModuleCollection.cs
- DateTimeConverter2.cs
- WindowsFormsHostPropertyMap.cs
- Win32KeyboardDevice.cs
- Msec.cs
- KeyValueInternalCollection.cs
- XmlRawWriter.cs
- SqlUtil.cs
- LayoutManager.cs
- ContextToken.cs
- AffineTransform3D.cs
- UnicodeEncoding.cs
- InvokePattern.cs
- PersistenceIOParticipant.cs
- ContentPlaceHolder.cs
- MouseGestureValueSerializer.cs
- GridViewAutoFormat.cs
- ForEach.cs
- XmlConvert.cs
- TraceContext.cs
- FixedDocument.cs
- PersianCalendar.cs
- DoubleLinkList.cs
- _FtpControlStream.cs
- Int32Rect.cs
- UIElement3D.cs
- ValidationEventArgs.cs
- TextBoxRenderer.cs
- MembershipSection.cs
- SqlUDTStorage.cs
- CompiledELinqQueryState.cs
- TypeInitializationException.cs
- CacheSection.cs
- IssuanceTokenProviderBase.cs
- DatagramAdapter.cs
- BitmapSizeOptions.cs
- DataServiceQuery.cs
- SafeWaitHandle.cs
- SessionParameter.cs
- WebPartConnection.cs
- ObjectToModelValueConverter.cs
- Storyboard.cs
- GotoExpression.cs
- XPathCompileException.cs
- DataSourceHelper.cs
- SignedInfo.cs
- CodeGeneratorOptions.cs
- DbParameterCollectionHelper.cs
- TextRangeBase.cs
- TraceListeners.cs
- DockAndAnchorLayout.cs
- CharConverter.cs
- TableLayoutStyle.cs
- ByeOperationAsyncResult.cs
- WindowsFormsHostAutomationPeer.cs
- SettingsPropertyNotFoundException.cs
- ellipse.cs
- CheckedListBox.cs
- CryptoProvider.cs
- CellConstant.cs
- SignatureResourcePool.cs
- MetadataArtifactLoader.cs
- DescendentsWalker.cs
- InitializationEventAttribute.cs
- MobileResource.cs
- PropertyToken.cs