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
- XPathDocumentIterator.cs
- ObjectIDGenerator.cs
- DataSvcMapFile.cs
- RelationshipSet.cs
- HandledMouseEvent.cs
- LinqDataSourceView.cs
- _KerberosClient.cs
- PanelDesigner.cs
- WorkflowInstance.cs
- FtpCachePolicyElement.cs
- SqlTransaction.cs
- RegexFCD.cs
- CacheOutputQuery.cs
- FilterException.cs
- EmptyStringExpandableObjectConverter.cs
- SqlFacetAttribute.cs
- AVElementHelper.cs
- DataGridViewCheckBoxCell.cs
- COM2FontConverter.cs
- TableChangeProcessor.cs
- XmlNodeReader.cs
- PrintPreviewDialog.cs
- TypeNameConverter.cs
- ContentIterators.cs
- SurrogateSelector.cs
- ProvideValueServiceProvider.cs
- NavigationPropertyEmitter.cs
- ISFClipboardData.cs
- XmlReflectionMember.cs
- QueryCursorEventArgs.cs
- Nullable.cs
- RoleBoolean.cs
- FtpCachePolicyElement.cs
- BufferedGraphicsManager.cs
- OdbcUtils.cs
- DesignerProperties.cs
- RNGCryptoServiceProvider.cs
- AttributeSetAction.cs
- DesigntimeLicenseContextSerializer.cs
- DataBoundControl.cs
- PeerConnector.cs
- BrowserDefinitionCollection.cs
- namescope.cs
- BridgeDataReader.cs
- embossbitmapeffect.cs
- ReadWriteObjectLock.cs
- RtfToXamlLexer.cs
- DocComment.cs
- AssemblyCache.cs
- CommandDevice.cs
- QilBinary.cs
- ToolStripStatusLabel.cs
- StateItem.cs
- Rect3D.cs
- StatusBar.cs
- X509CertificateStore.cs
- DateTimeOffset.cs
- PropertyValue.cs
- SystemBrushes.cs
- CompileXomlTask.cs
- ObjectView.cs
- EntityConnection.cs
- FlowDocumentView.cs
- ExpressionParser.cs
- SelectorAutomationPeer.cs
- FontWeightConverter.cs
- InkCanvasFeedbackAdorner.cs
- FileSystemWatcher.cs
- AssociationSetMetadata.cs
- XmlUtil.cs
- BindingElementExtensionElement.cs
- XPathExpr.cs
- TableRowCollection.cs
- ForEachAction.cs
- ParameterExpression.cs
- TextAction.cs
- EnumMember.cs
- MetadataUtilsSmi.cs
- XmlElementAttributes.cs
- SpecialFolderEnumConverter.cs
- ExtendedTransformFactory.cs
- PersonalizablePropertyEntry.cs
- Assert.cs
- GrabHandleGlyph.cs
- CopyCodeAction.cs
- SchemaNames.cs
- HandlerBase.cs
- CdpEqualityComparer.cs
- EntityViewGenerationAttribute.cs
- ResourcePermissionBaseEntry.cs
- ProgressChangedEventArgs.cs
- BitmapEffectInputData.cs
- CurrentChangingEventManager.cs
- SizeAnimationClockResource.cs
- UserInitiatedNavigationPermission.cs
- ContractMapping.cs
- AssemblyBuilder.cs
- DropSource.cs
- ExtensionCollection.cs
- CodeConditionStatement.cs