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
- CachingHintValidation.cs
- DataBinder.cs
- MouseGesture.cs
- MultipartContentParser.cs
- Panel.cs
- Storyboard.cs
- ActivityExecutionContext.cs
- ObjectQueryState.cs
- ExpressionVisitor.cs
- ProfileBuildProvider.cs
- AssemblyHash.cs
- Cast.cs
- QfeChecker.cs
- isolationinterop.cs
- SoapConverter.cs
- OpenTypeCommon.cs
- DesignerResources.cs
- SessionMode.cs
- DataGridViewColumnEventArgs.cs
- EntityDataSourceSelectingEventArgs.cs
- Pool.cs
- indexingfiltermarshaler.cs
- CounterSample.cs
- GlobalProxySelection.cs
- Rotation3DAnimation.cs
- CssTextWriter.cs
- List.cs
- xmlglyphRunInfo.cs
- HostedBindingBehavior.cs
- OptimisticConcurrencyException.cs
- DynamicEntity.cs
- HttpResponseHeader.cs
- UTF8Encoding.cs
- TextBoxAutomationPeer.cs
- PlatformNotSupportedException.cs
- Int16.cs
- CipherData.cs
- DataTransferEventArgs.cs
- ClickablePoint.cs
- QueryInterceptorAttribute.cs
- PrivacyNoticeBindingElement.cs
- BindingManagerDataErrorEventArgs.cs
- TemplateBindingExpressionConverter.cs
- ProfilePropertySettings.cs
- RawStylusInputReport.cs
- DataPagerFieldCollection.cs
- WmiEventSink.cs
- unsafeIndexingFilterStream.cs
- QueryCacheKey.cs
- DriveInfo.cs
- DataBoundControl.cs
- DBAsyncResult.cs
- UIPermission.cs
- RegexCharClass.cs
- _DisconnectOverlappedAsyncResult.cs
- HtmlAnchor.cs
- BlurBitmapEffect.cs
- Stackframe.cs
- GeometryModel3D.cs
- DocumentViewerAutomationPeer.cs
- SecurityToken.cs
- XmlSchemaException.cs
- OLEDB_Enum.cs
- TriggerBase.cs
- TreeNodeCollectionEditorDialog.cs
- XmlSchemaInclude.cs
- DebugHandleTracker.cs
- UniqueEventHelper.cs
- DataTableCollection.cs
- SchemaHelper.cs
- Codec.cs
- SecurityTokenRequirement.cs
- MachineKeySection.cs
- MessageHeaderDescriptionCollection.cs
- TreeIterator.cs
- NativeObjectSecurity.cs
- XmlDomTextWriter.cs
- SchemaImporterExtensionElement.cs
- ObjectDataSourceView.cs
- Expression.cs
- PersonalizationDictionary.cs
- TextEditorThreadLocalStore.cs
- EventMemberCodeDomSerializer.cs
- LayoutTable.cs
- DataGridViewCellMouseEventArgs.cs
- ProfilePropertySettingsCollection.cs
- QueryExecutionOption.cs
- GestureRecognitionResult.cs
- SqlDataAdapter.cs
- BamlRecordReader.cs
- DecimalAnimationBase.cs
- DPCustomTypeDescriptor.cs
- JoinSymbol.cs
- RequestContext.cs
- MetadataItemCollectionFactory.cs
- CodeSnippetStatement.cs
- RecordManager.cs
- VirtualizingPanel.cs
- GB18030Encoding.cs
- SimpleApplicationHost.cs