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
- WorkflowEnvironment.cs
- HtmlTable.cs
- FontSource.cs
- ProfessionalColorTable.cs
- Translator.cs
- DataAdapter.cs
- GroupStyle.cs
- ComponentConverter.cs
- StatusCommandUI.cs
- Package.cs
- Size3DConverter.cs
- SignedXml.cs
- StorageModelBuildProvider.cs
- CommandExpr.cs
- FixUpCollection.cs
- CodeSubDirectory.cs
- DataGridViewCheckBoxCell.cs
- VScrollBar.cs
- GZipDecoder.cs
- ProgressChangedEventArgs.cs
- ObjectListItemCollection.cs
- GeneralTransform3DGroup.cs
- XmlReflectionImporter.cs
- UnsignedPublishLicense.cs
- EntityProviderServices.cs
- LicenseProviderAttribute.cs
- TabControlEvent.cs
- QilStrConcatenator.cs
- Pointer.cs
- HandleValueEditor.cs
- RevocationPoint.cs
- OutputScopeManager.cs
- PriorityItem.cs
- MailAddressCollection.cs
- CompositeActivityTypeDescriptorProvider.cs
- DeclaredTypeValidator.cs
- RSAPKCS1SignatureDeformatter.cs
- TabControlEvent.cs
- CalendarTable.cs
- SafeUserTokenHandle.cs
- SqlDependencyListener.cs
- ObjectListGeneralPage.cs
- DataBindingHandlerAttribute.cs
- PipeStream.cs
- WebPartMovingEventArgs.cs
- WebControlsSection.cs
- ActivityCodeDomSerializationManager.cs
- TextStore.cs
- Nullable.cs
- StickyNoteAnnotations.cs
- QilExpression.cs
- NotSupportedException.cs
- XmlQueryOutput.cs
- ScriptingProfileServiceSection.cs
- SoapIgnoreAttribute.cs
- BitConverter.cs
- BitmapInitialize.cs
- ResolveNameEventArgs.cs
- SqlClientFactory.cs
- TableParaClient.cs
- ListViewInsertedEventArgs.cs
- NavigationCommands.cs
- RequestUriProcessor.cs
- WebHttpEndpoint.cs
- DataGridColumn.cs
- SetterTriggerConditionValueConverter.cs
- __Filters.cs
- AuthenticatedStream.cs
- EncoderExceptionFallback.cs
- XmlExpressionDumper.cs
- DbConnectionClosed.cs
- LoginView.cs
- StateFinalizationActivity.cs
- StatusBarPanel.cs
- securitymgrsite.cs
- CustomValidator.cs
- SystemWebCachingSectionGroup.cs
- ModuleElement.cs
- InvalidStoreProtectionKeyException.cs
- Mouse.cs
- ColorIndependentAnimationStorage.cs
- DataReaderContainer.cs
- FrugalMap.cs
- HttpRequest.cs
- printdlgexmarshaler.cs
- OdbcConnectionHandle.cs
- SourceItem.cs
- SimpleBitVector32.cs
- TextOnlyOutput.cs
- LineGeometry.cs
- Drawing.cs
- CustomCategoryAttribute.cs
- HelpInfo.cs
- Literal.cs
- TableColumn.cs
- Variant.cs
- LocalizableAttribute.cs
- SafeReversePInvokeHandle.cs
- AsymmetricKeyExchangeFormatter.cs
- EventKeyword.cs