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
- Grant.cs
- ArrayExtension.cs
- DbExpressionVisitor_TResultType.cs
- StateElementCollection.cs
- ProcessModule.cs
- TextDecorationLocationValidation.cs
- ReflectEventDescriptor.cs
- DataGridViewCellMouseEventArgs.cs
- TabRenderer.cs
- Binding.cs
- EnumValidator.cs
- LassoSelectionBehavior.cs
- BadImageFormatException.cs
- SmtpSection.cs
- TitleStyle.cs
- MemoryMappedFile.cs
- ProbeMatchesApril2005.cs
- RoleManagerEventArgs.cs
- HttpVersion.cs
- RefreshPropertiesAttribute.cs
- StringExpressionSet.cs
- StateMachineTimers.cs
- ShutDownListener.cs
- BitmapEffect.cs
- _emptywebproxy.cs
- SecurityKeyIdentifierClause.cs
- Animatable.cs
- Window.cs
- TranslateTransform.cs
- Unit.cs
- EntityDataSourceContextCreatingEventArgs.cs
- FixedPosition.cs
- Timer.cs
- DataColumnCollection.cs
- SqlDataReaderSmi.cs
- WebProxyScriptElement.cs
- NetDataContractSerializer.cs
- httpapplicationstate.cs
- AutoGeneratedFieldProperties.cs
- HuffmanTree.cs
- ClosableStream.cs
- PermissionListSet.cs
- FakeModelPropertyImpl.cs
- TextSpanModifier.cs
- ClientRolePrincipal.cs
- ImageBrush.cs
- SqlLiftIndependentRowExpressions.cs
- SpeakCompletedEventArgs.cs
- RangeBase.cs
- DataPagerFieldCommandEventArgs.cs
- ConfigXmlCDataSection.cs
- ActivityBuilderXamlWriter.cs
- Stylesheet.cs
- SocketInformation.cs
- ContextInformation.cs
- BindingManagerDataErrorEventArgs.cs
- NullEntityWrapper.cs
- EdmComplexTypeAttribute.cs
- HttpClientChannel.cs
- smtpconnection.cs
- PathGeometry.cs
- IBuiltInEvidence.cs
- PermissionAttributes.cs
- PopupRootAutomationPeer.cs
- PropertyCondition.cs
- EmptyEnumerable.cs
- MaterializeFromAtom.cs
- TraceRecords.cs
- DataGridViewColumnCollection.cs
- SimpleBitVector32.cs
- ErrorView.xaml.cs
- PenThreadWorker.cs
- MaterialGroup.cs
- SeekableReadStream.cs
- EndPoint.cs
- ConnectionConsumerAttribute.cs
- WebPartDisplayModeCancelEventArgs.cs
- AssociationTypeEmitter.cs
- Vector3DKeyFrameCollection.cs
- DataChangedEventManager.cs
- MessageQueuePermission.cs
- _SslState.cs
- UIAgentMonitorHandle.cs
- XhtmlTextWriter.cs
- StyleCollection.cs
- TypeConverterAttribute.cs
- VirtualDirectoryMappingCollection.cs
- OletxResourceManager.cs
- CmsUtils.cs
- querybuilder.cs
- MsmqTransportBindingElement.cs
- CodeNamespaceCollection.cs
- SqlProfileProvider.cs
- OuterGlowBitmapEffect.cs
- IProvider.cs
- FileSecurity.cs
- PathSegmentCollection.cs
- FixedFlowMap.cs
- AutomationIdentifierGuids.cs
- WebBrowserUriTypeConverter.cs