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
- PreProcessor.cs
- SelectionWordBreaker.cs
- Knowncolors.cs
- EndpointAddress.cs
- NavigatorInvalidBodyAccessException.cs
- ItemsControl.cs
- ControlPropertyNameConverter.cs
- HttpModuleCollection.cs
- HorizontalAlignConverter.cs
- MessageRpc.cs
- ServiceTimeoutsElement.cs
- ExitEventArgs.cs
- LightweightCodeGenerator.cs
- SafeArrayTypeMismatchException.cs
- filewebresponse.cs
- MasterPage.cs
- PropertyValidationContext.cs
- BrowserCapabilitiesCompiler.cs
- Double.cs
- PageParser.cs
- ExtensionFile.cs
- AutomationProperties.cs
- HyperlinkAutomationPeer.cs
- MenuItemBinding.cs
- ExpandCollapseProviderWrapper.cs
- WCFModelStrings.Designer.cs
- MailMessageEventArgs.cs
- XDRSchema.cs
- CacheVirtualItemsEvent.cs
- GridItemPatternIdentifiers.cs
- OracleDataAdapter.cs
- HostingEnvironmentSection.cs
- TriggerActionCollection.cs
- TextServicesDisplayAttribute.cs
- ConfigXmlDocument.cs
- StaticContext.cs
- PostBackTrigger.cs
- CryptoConfig.cs
- HashHelper.cs
- InvokeWebService.cs
- AnimatedTypeHelpers.cs
- WebPartEditorOkVerb.cs
- DataBindingHandlerAttribute.cs
- ClipboardData.cs
- PauseStoryboard.cs
- DebugView.cs
- FormatConvertedBitmap.cs
- LabelAutomationPeer.cs
- DSASignatureDeformatter.cs
- Metadata.cs
- MenuItem.cs
- _NegotiateClient.cs
- NotConverter.cs
- RuntimeVariableList.cs
- QuotedStringWriteStateInfo.cs
- GeometryGroup.cs
- DefaultAsyncDataDispatcher.cs
- FlowDocumentPaginator.cs
- CfgSemanticTag.cs
- SweepDirectionValidation.cs
- ValueUnavailableException.cs
- SqlGatherConsumedAliases.cs
- ModifierKeysValueSerializer.cs
- FamilyMap.cs
- NetCodeGroup.cs
- ExpressionWriter.cs
- TypeDependencyAttribute.cs
- ListMarkerLine.cs
- FragmentQueryKB.cs
- ListBoxDesigner.cs
- Label.cs
- FontNamesConverter.cs
- Pkcs7Signer.cs
- PositiveTimeSpanValidatorAttribute.cs
- GridViewRowPresenterBase.cs
- OledbConnectionStringbuilder.cs
- SingleAnimationBase.cs
- shaper.cs
- _ConnectOverlappedAsyncResult.cs
- SpeakCompletedEventArgs.cs
- DataMemberConverter.cs
- QuaternionKeyFrameCollection.cs
- RefreshEventArgs.cs
- PerformanceCounterCategory.cs
- ProtectedConfigurationSection.cs
- LineUtil.cs
- InitializationEventAttribute.cs
- _emptywebproxy.cs
- SectionXmlInfo.cs
- IssuanceLicense.cs
- AuthenticatingEventArgs.cs
- XmlEntity.cs
- CollectionChangedEventManager.cs
- SoapHeader.cs
- PauseStoryboard.cs
- EnterpriseServicesHelper.cs
- ValidationEventArgs.cs
- MaterialGroup.cs
- DBCSCodePageEncoding.cs
- BackgroundFormatInfo.cs