Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Common / Utils / ThreadSafeList.cs / 1305376 / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MediaSystem.cs
- NetworkCredential.cs
- Repeater.cs
- DataGridViewRowCancelEventArgs.cs
- MachineSettingsSection.cs
- ColorTransform.cs
- DocumentPageViewAutomationPeer.cs
- CodeExporter.cs
- TransactionFlowProperty.cs
- XmlAutoDetectWriter.cs
- mongolianshape.cs
- CompModSwitches.cs
- GeometryValueSerializer.cs
- _CommandStream.cs
- SqlFlattener.cs
- XmlSchemas.cs
- WmlCalendarAdapter.cs
- ViewService.cs
- CompositeFontFamily.cs
- DropTarget.cs
- DataBoundControlAdapter.cs
- CommandCollectionEditor.cs
- MultiView.cs
- PropertyEntry.cs
- XmlSchemaDatatype.cs
- Grant.cs
- CombinedGeometry.cs
- ColorMap.cs
- VisualStyleTypesAndProperties.cs
- XPathNodeHelper.cs
- PeerName.cs
- ContentControl.cs
- ViewCellRelation.cs
- ProjectionCamera.cs
- DelegateArgumentValue.cs
- ValueProviderWrapper.cs
- BaseDataList.cs
- StylusLogic.cs
- HostProtectionException.cs
- SwitchLevelAttribute.cs
- ChildDocumentBlock.cs
- CodeComment.cs
- ParserContext.cs
- MimeFormReflector.cs
- RotationValidation.cs
- NavigationHelper.cs
- DesignerSelectionListAdapter.cs
- TextAnchor.cs
- NullableIntMinMaxAggregationOperator.cs
- IgnoreDataMemberAttribute.cs
- DeploymentExceptionMapper.cs
- TransactionBridge.cs
- COAUTHINFO.cs
- StringBuilder.cs
- XD.cs
- PeerNearMe.cs
- HandleCollector.cs
- Semaphore.cs
- WindowsTreeView.cs
- DbConnectionPoolGroup.cs
- RuntimeArgumentHandle.cs
- DSASignatureDeformatter.cs
- SoapSchemaExporter.cs
- CurrentChangedEventManager.cs
- DbConnectionPool.cs
- NestPullup.cs
- WhereQueryOperator.cs
- PartitionedDataSource.cs
- WorkflowViewElement.cs
- BitmapFrame.cs
- CachedTypeface.cs
- AppDomainAttributes.cs
- shaperfactoryquerycacheentry.cs
- CellRelation.cs
- Region.cs
- ForwardPositionQuery.cs
- WebAdminConfigurationHelper.cs
- OneOfConst.cs
- ContentPlaceHolder.cs
- ContextInformation.cs
- DbParameterCollectionHelper.cs
- SqlTrackingService.cs
- ProcessHostMapPath.cs
- PeerApplication.cs
- XmlName.cs
- AvtEvent.cs
- HttpHandlerAction.cs
- Splitter.cs
- Translator.cs
- QueryReaderSettings.cs
- DataObject.cs
- IPEndPoint.cs
- Journaling.cs
- XmlTextEncoder.cs
- HtmlImage.cs
- SessionSwitchEventArgs.cs
- ComboBox.cs
- SqlTypeSystemProvider.cs
- WSHttpBindingBase.cs
- DiagnosticEventProvider.cs