Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- DataGridViewMethods.cs
- Attribute.cs
- WebPartConnectionsDisconnectVerb.cs
- TextServicesPropertyRanges.cs
- ManipulationDelta.cs
- WCFModelStrings.Designer.cs
- TimelineGroup.cs
- CustomError.cs
- NamespaceInfo.cs
- InvalidOleVariantTypeException.cs
- OutputCacheModule.cs
- X500Name.cs
- AuthenticationService.cs
- DataGridHelper.cs
- ElementNotAvailableException.cs
- SafeIUnknown.cs
- EventLogWatcher.cs
- XamlPathDataSerializer.cs
- DataSourceGeneratorException.cs
- CharEntityEncoderFallback.cs
- XmlMtomReader.cs
- SymbolPair.cs
- TextEditorDragDrop.cs
- GradientStop.cs
- SimpleWorkerRequest.cs
- CompatibleComparer.cs
- ComponentEvent.cs
- LoadWorkflowByKeyAsyncResult.cs
- ForeignKeyConstraint.cs
- RSAPKCS1SignatureFormatter.cs
- ScriptResourceInfo.cs
- ArgumentException.cs
- ComponentChangingEvent.cs
- TraceContextRecord.cs
- Regex.cs
- SqlDependency.cs
- TextBox.cs
- WindowsListViewSubItem.cs
- WindowsEditBoxRange.cs
- DbException.cs
- RoutingChannelExtension.cs
- CheckoutException.cs
- TreeNodeMouseHoverEvent.cs
- AuthenticationModuleElement.cs
- PersonalizationProviderCollection.cs
- ResourceCategoryAttribute.cs
- HttpServerVarsCollection.cs
- ScaleTransform3D.cs
- VariableAction.cs
- SortedDictionary.cs
- DetailsViewDeletedEventArgs.cs
- EndpointConfigContainer.cs
- CounterCreationDataCollection.cs
- StorageAssociationTypeMapping.cs
- SvcMapFileSerializer.cs
- PageThemeCodeDomTreeGenerator.cs
- SortKey.cs
- FixedSOMPage.cs
- ChangesetResponse.cs
- LocalizableResourceBuilder.cs
- Metadata.cs
- PermissionSetTriple.cs
- EdmRelationshipRoleAttribute.cs
- RowToFieldTransformer.cs
- PartialCachingControl.cs
- KeyedHashAlgorithm.cs
- StyleCollection.cs
- MessageSecurityVersion.cs
- CodeTypeReference.cs
- Decimal.cs
- HMACSHA256.cs
- ErrorFormatter.cs
- EmbeddedObject.cs
- ConfigXmlWhitespace.cs
- _OverlappedAsyncResult.cs
- GridEntry.cs
- DataGridViewAdvancedBorderStyle.cs
- WindowHideOrCloseTracker.cs
- BaseDataBoundControl.cs
- RectValueSerializer.cs
- XmlSchemaAnnotated.cs
- SmtpNtlmAuthenticationModule.cs
- AsyncPostBackErrorEventArgs.cs
- HttpRawResponse.cs
- WebZoneDesigner.cs
- IndexingContentUnit.cs
- ToolStripContentPanelDesigner.cs
- CodeExporter.cs
- PropertyGeneratedEventArgs.cs
- CryptoProvider.cs
- PseudoWebRequest.cs
- TransformedBitmap.cs
- DataMemberListEditor.cs
- CultureInfoConverter.cs
- RedistVersionInfo.cs
- VersionedStream.cs
- TraceUtility.cs
- XmlUnspecifiedAttribute.cs
- TextEditorSpelling.cs
- HMACSHA384.cs