Code:
/ 4.0 / 4.0 / 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. //---------------------------------------------------------------------- // // 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
- PageCache.cs
- DoubleIndependentAnimationStorage.cs
- Simplifier.cs
- PlainXmlSerializer.cs
- AssemblyName.cs
- BitmapMetadata.cs
- AddInProcess.cs
- XdrBuilder.cs
- ZipIOCentralDirectoryFileHeader.cs
- OSFeature.cs
- FontResourceCache.cs
- IDataContractSurrogate.cs
- InputMethodStateChangeEventArgs.cs
- NameObjectCollectionBase.cs
- RawStylusInput.cs
- StatusBarItem.cs
- LocalValueEnumerator.cs
- UserControl.cs
- ScaleTransform.cs
- NavigationPropertySingletonExpression.cs
- DtdParser.cs
- TextElementEnumerator.cs
- DateTimeParse.cs
- ValidatedControlConverter.cs
- IdentifierService.cs
- FormViewPageEventArgs.cs
- _AutoWebProxyScriptEngine.cs
- RenameRuleObjectDialog.Designer.cs
- _LoggingObject.cs
- XmlAttributeCollection.cs
- Dump.cs
- Zone.cs
- Binding.cs
- HostSecurityManager.cs
- TextRunTypographyProperties.cs
- InstanceOwner.cs
- odbcmetadatacollectionnames.cs
- ProcessHostMapPath.cs
- ToolStripPanelCell.cs
- validation.cs
- AdornerDecorator.cs
- LeafCellTreeNode.cs
- SessionParameter.cs
- GroupBox.cs
- TokenBasedSet.cs
- TreeViewImageGenerator.cs
- KeyValueConfigurationElement.cs
- BuilderInfo.cs
- ConfigurationManager.cs
- RegionIterator.cs
- BinaryExpressionHelper.cs
- WebPartsPersonalization.cs
- XPathNavigatorReader.cs
- MimeFormReflector.cs
- DataGridCommandEventArgs.cs
- XmlResolver.cs
- GlyphCollection.cs
- RoamingStoreFile.cs
- SmtpLoginAuthenticationModule.cs
- SplitContainer.cs
- TextChange.cs
- EmptyElement.cs
- ScrollChrome.cs
- WSAddressing10ProblemHeaderQNameFault.cs
- DeferredTextReference.cs
- DataRow.cs
- AdornedElementPlaceholder.cs
- ToolStripSeparatorRenderEventArgs.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- TraceProvider.cs
- ContextMenu.cs
- ColorConvertedBitmap.cs
- FrameSecurityDescriptor.cs
- HttpCapabilitiesSectionHandler.cs
- HttpListenerRequest.cs
- SoapServerProtocol.cs
- Header.cs
- ContextQuery.cs
- DesignerAttribute.cs
- DataGridViewColumnHeaderCell.cs
- CompilerScope.Storage.cs
- XamlSerializer.cs
- TableLayout.cs
- BoundColumn.cs
- HtmlLabelAdapter.cs
- MenuItemBinding.cs
- TemplatedControlDesigner.cs
- EventSetterHandlerConverter.cs
- CodeDefaultValueExpression.cs
- AlignmentYValidation.cs
- ListItemConverter.cs
- CodeObjectCreateExpression.cs
- CustomAttributeFormatException.cs
- WorkflowRequestContext.cs
- ListItemConverter.cs
- DesignerLinkAdapter.cs
- InputLangChangeRequestEvent.cs
- EventLogPermissionEntry.cs
- Image.cs
- sqlinternaltransaction.cs