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
- Exceptions.cs
- DataListItemCollection.cs
- DataContext.cs
- Button.cs
- ObjectDataSourceEventArgs.cs
- HttpListener.cs
- ComboBoxRenderer.cs
- TextRange.cs
- AspNetSynchronizationContext.cs
- MissingManifestResourceException.cs
- DoWorkEventArgs.cs
- SourceChangedEventArgs.cs
- _TimerThread.cs
- OleDbRowUpdatedEvent.cs
- StreamWithDictionary.cs
- Attributes.cs
- ForceCopyBuildProvider.cs
- MessageLogger.cs
- UpdatePanel.cs
- GC.cs
- ResourceSetExpression.cs
- ZipIOCentralDirectoryFileHeader.cs
- LocalizationComments.cs
- Parser.cs
- WebEvents.cs
- SystemIPAddressInformation.cs
- SingleAnimationBase.cs
- Html32TextWriter.cs
- BufferBuilder.cs
- JsonXmlDataContract.cs
- ConfigXmlElement.cs
- DesignTimeTemplateParser.cs
- FilteredDataSetHelper.cs
- RuntimeConfigLKG.cs
- MSAANativeProvider.cs
- RawKeyboardInputReport.cs
- BaseTemplateParser.cs
- FieldDescriptor.cs
- SqlStatistics.cs
- DragEvent.cs
- Crc32Helper.cs
- HyperLinkColumn.cs
- PropertyOverridesTypeEditor.cs
- ProgressiveCrcCalculatingStream.cs
- ControlBuilderAttribute.cs
- LocalizedNameDescriptionPair.cs
- RegistrySecurity.cs
- IDQuery.cs
- OperatingSystem.cs
- Button.cs
- FormViewModeEventArgs.cs
- InteropAutomationProvider.cs
- XpsSerializationException.cs
- UnaryExpression.cs
- Types.cs
- ApplicationServicesHostFactory.cs
- ErrorRuntimeConfig.cs
- Point4DValueSerializer.cs
- IPipelineRuntime.cs
- BitmapEffectRenderDataResource.cs
- WindowsListViewItemCheckBox.cs
- EntityKey.cs
- DataRecordInternal.cs
- DataPagerFieldCollection.cs
- DictionaryEntry.cs
- DataServiceExpressionVisitor.cs
- FactoryId.cs
- FormsAuthenticationUserCollection.cs
- Stroke.cs
- ViewStateException.cs
- DocumentPageTextView.cs
- RSAOAEPKeyExchangeFormatter.cs
- FormsAuthenticationUserCollection.cs
- ClientCredentialsElement.cs
- SourceFilter.cs
- SoapFormatter.cs
- PointAnimation.cs
- SafeSystemMetrics.cs
- Serializer.cs
- RootBrowserWindowAutomationPeer.cs
- PathFigureCollectionValueSerializer.cs
- TextTreeInsertElementUndoUnit.cs
- IDictionary.cs
- ScrollBar.cs
- BlurEffect.cs
- DecimalConstantAttribute.cs
- Enlistment.cs
- mda.cs
- PropertyEntry.cs
- ColumnPropertiesGroup.cs
- ObjectListDesigner.cs
- DbgUtil.cs
- ObjectListDesigner.cs
- KnowledgeBase.cs
- RangeContentEnumerator.cs
- SecuritySessionSecurityTokenAuthenticator.cs
- ValuePattern.cs
- DataGridViewHitTestInfo.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- AxisAngleRotation3D.cs