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
- XmlElementAttribute.cs
- InvokeFunc.cs
- GPRECTF.cs
- PropertyMappingExceptionEventArgs.cs
- BooleanConverter.cs
- DupHandleConnectionReader.cs
- DataGridTable.cs
- InvalidEnumArgumentException.cs
- Stacktrace.cs
- BufferedWebEventProvider.cs
- MarginsConverter.cs
- PriorityQueue.cs
- ObjectQueryState.cs
- HttpModule.cs
- BinaryReader.cs
- ConfigXmlCDataSection.cs
- StaticFileHandler.cs
- SmiEventSink_Default.cs
- CodeIterationStatement.cs
- EllipseGeometry.cs
- LinearQuaternionKeyFrame.cs
- TextComposition.cs
- OutputCacheSection.cs
- OdbcConnectionPoolProviderInfo.cs
- BamlLocalizableResourceKey.cs
- ProjectedSlot.cs
- Conditional.cs
- ProjectionPruner.cs
- XmlIncludeAttribute.cs
- DBCSCodePageEncoding.cs
- XmlSchemaExporter.cs
- LOSFormatter.cs
- Single.cs
- DrawingContextWalker.cs
- ListViewContainer.cs
- FunctionImportElement.cs
- DocumentViewerAutomationPeer.cs
- ProcessModelInfo.cs
- COM2AboutBoxPropertyDescriptor.cs
- StringAttributeCollection.cs
- SettingsBindableAttribute.cs
- precedingquery.cs
- UnsafeNativeMethodsPenimc.cs
- Site.cs
- BypassElement.cs
- WindowsToolbar.cs
- ContextQuery.cs
- COM2PropertyDescriptor.cs
- Journaling.cs
- ToolStripArrowRenderEventArgs.cs
- ComponentCollection.cs
- FigureParaClient.cs
- WebPartUserCapability.cs
- StringFunctions.cs
- InplaceBitmapMetadataWriter.cs
- DateTimeFormatInfo.cs
- WithStatement.cs
- HandlerBase.cs
- XmlSchemaDocumentation.cs
- TraceHelpers.cs
- ExpressionPrefixAttribute.cs
- TextBoxAutomationPeer.cs
- Activity.cs
- UnmanagedMemoryStreamWrapper.cs
- FreezableOperations.cs
- CopyNamespacesAction.cs
- PrefixQName.cs
- TreeViewCancelEvent.cs
- BlockingCollection.cs
- ButtonDesigner.cs
- HtmlProps.cs
- DataGridBoundColumn.cs
- DbParameterCollectionHelper.cs
- DataControlFieldHeaderCell.cs
- SqlFactory.cs
- WpfPayload.cs
- SspiWrapper.cs
- Missing.cs
- _NegotiateClient.cs
- CompleteWizardStep.cs
- ColorBlend.cs
- EncryptedXml.cs
- ObjectItemConventionAssemblyLoader.cs
- WebEventTraceProvider.cs
- PtsContext.cs
- RootDesignerSerializerAttribute.cs
- figurelength.cs
- EventRecordWrittenEventArgs.cs
- COAUTHIDENTITY.cs
- HttpRequest.cs
- base64Transforms.cs
- CodeDefaultValueExpression.cs
- DateTimeSerializationSection.cs
- CacheEntry.cs
- COM2TypeInfoProcessor.cs
- Funcletizer.cs
- FormsAuthenticationUser.cs
- Point4DValueSerializer.cs
- SmiGettersStream.cs
- DateTimeOffset.cs