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
- ExceptionDetail.cs
- ObjectParameterCollection.cs
- ObjectIDGenerator.cs
- XmlNodeReader.cs
- AffineTransform3D.cs
- Currency.cs
- AbstractDataSvcMapFileLoader.cs
- Recipient.cs
- DateTimeFormatInfoScanner.cs
- MissingManifestResourceException.cs
- ContainerFilterService.cs
- InterleavedZipPartStream.cs
- PropertyKey.cs
- SqlFunctions.cs
- ZipIOExtraFieldPaddingElement.cs
- DllNotFoundException.cs
- LowerCaseStringConverter.cs
- AssociatedControlConverter.cs
- COM2FontConverter.cs
- TextEditor.cs
- AttributeProviderAttribute.cs
- RightsManagementPermission.cs
- TracingConnectionListener.cs
- COSERVERINFO.cs
- ADMembershipUser.cs
- PartialCachingControl.cs
- DesignerTextBoxAdapter.cs
- ObjectReaderCompiler.cs
- QEncodedStream.cs
- ContextMarshalException.cs
- HashAlgorithm.cs
- HuffModule.cs
- COM2ColorConverter.cs
- CodeMemberField.cs
- ListenerPerfCounters.cs
- DbExpressionVisitor.cs
- DSASignatureFormatter.cs
- KoreanCalendar.cs
- ArgIterator.cs
- ParameterReplacerVisitor.cs
- DeviceContext.cs
- sqlnorm.cs
- ViewBase.cs
- DrawingServices.cs
- BitmapCodecInfo.cs
- SchemaElement.cs
- LicenseContext.cs
- NativeRightsManagementAPIsStructures.cs
- SafeSystemMetrics.cs
- SerializeAbsoluteContext.cs
- ActivitySurrogateSelector.cs
- PropertyChangedEventArgs.cs
- CodeTypeReference.cs
- SessionStateContainer.cs
- CompensateDesigner.cs
- ApplicationHost.cs
- XamlFigureLengthSerializer.cs
- TablePattern.cs
- LinearGradientBrush.cs
- Tool.cs
- ListViewItem.cs
- DragDropHelper.cs
- AuthenticationManager.cs
- FunctionParameter.cs
- PeerNameRecord.cs
- WorkflowMarkupSerializationManager.cs
- UIElementPropertyUndoUnit.cs
- SqlTypeSystemProvider.cs
- IpcManager.cs
- DesignerOptionService.cs
- UnionCodeGroup.cs
- XmlSchemaFacet.cs
- XslException.cs
- LabelLiteral.cs
- SoapIncludeAttribute.cs
- _TLSstream.cs
- FormClosedEvent.cs
- TextBoxView.cs
- UmAlQuraCalendar.cs
- SendMailErrorEventArgs.cs
- InfoCardRSAOAEPKeyExchangeFormatter.cs
- SqlTopReducer.cs
- XmlSchemaComplexContentExtension.cs
- StructuralObject.cs
- RepeaterItemEventArgs.cs
- RouteItem.cs
- DoWorkEventArgs.cs
- EntityDataSourceStatementEditorForm.cs
- CompositeFontFamily.cs
- CommandBinding.cs
- Clipboard.cs
- TextSelection.cs
- ProjectionPlanCompiler.cs
- Application.cs
- Opcode.cs
- SAPIEngineTypes.cs
- ApplicationSecurityManager.cs
- VisualStyleInformation.cs
- WsrmFault.cs
- HelpEvent.cs