Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- ByteStack.cs
- ExtensionDataReader.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- FunctionDetailsReader.cs
- SchemaDeclBase.cs
- StylusPointProperties.cs
- RegexNode.cs
- CompositeFontParser.cs
- View.cs
- FormViewCommandEventArgs.cs
- PrinterUnitConvert.cs
- Highlights.cs
- FileUtil.cs
- FrameworkObject.cs
- MsmqHostedTransportManager.cs
- XmlChildNodes.cs
- Color.cs
- GetPageCompletedEventArgs.cs
- SafeRightsManagementQueryHandle.cs
- DisplayMemberTemplateSelector.cs
- BookmarkScope.cs
- XmlTextWriter.cs
- MultilineStringConverter.cs
- BufferedReadStream.cs
- ModuleConfigurationInfo.cs
- NavigationProperty.cs
- FlowDecision.cs
- RepeatButton.cs
- DBSqlParserColumn.cs
- SubclassTypeValidatorAttribute.cs
- WebPartEditorCancelVerb.cs
- CompositeClientFormatter.cs
- PageFunction.cs
- GenericEnumConverter.cs
- TextEffect.cs
- TypeBuilderInstantiation.cs
- DbBuffer.cs
- GifBitmapDecoder.cs
- BackStopAuthenticationModule.cs
- MulticastIPAddressInformationCollection.cs
- XhtmlBasicPanelAdapter.cs
- RenderDataDrawingContext.cs
- ApplicationInfo.cs
- Bitmap.cs
- ConfigurationSettings.cs
- TCEAdapterGenerator.cs
- MetadataSerializer.cs
- StringFunctions.cs
- UniqueIdentifierService.cs
- streamingZipPartStream.cs
- OutputChannel.cs
- BuildResultCache.cs
- ArrangedElement.cs
- PersonalizationState.cs
- Rule.cs
- TextServicesCompartment.cs
- FontSource.cs
- UnsafeNativeMethods.cs
- ListContractAdapter.cs
- GuidelineCollection.cs
- SettingsSection.cs
- Options.cs
- ExpressionBuilder.cs
- RegexCharClass.cs
- ReadOnlyPropertyMetadata.cs
- PointF.cs
- SqlDataSourceSelectingEventArgs.cs
- _MultipleConnectAsync.cs
- storagemappingitemcollection.viewdictionary.cs
- FullTextLine.cs
- XMLSchema.cs
- ImportedNamespaceContextItem.cs
- DecimalStorage.cs
- TaskDesigner.cs
- TextTreeRootTextBlock.cs
- ColumnPropertiesGroup.cs
- FilterableAttribute.cs
- DefaultObjectMappingItemCollection.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- ButtonFlatAdapter.cs
- ProcessStartInfo.cs
- QuadraticBezierSegment.cs
- DataServiceClientException.cs
- VBCodeProvider.cs
- GACMembershipCondition.cs
- XmlProcessingInstruction.cs
- GlobalAclOperationRequirement.cs
- ByteAnimation.cs
- NameValueSectionHandler.cs
- TextTreeTextBlock.cs
- SafeFreeMibTable.cs
- CanExecuteRoutedEventArgs.cs
- ClassHandlersStore.cs
- JsonDeserializer.cs
- SessionIDManager.cs
- DeriveBytes.cs
- LayoutUtils.cs
- WindowsServiceElement.cs
- ValidationService.cs
- IsolatedStoragePermission.cs