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
- DecimalStorage.cs
- ExtensionQuery.cs
- DocumentEventArgs.cs
- PasswordBox.cs
- wgx_sdk_version.cs
- InvokeHandlers.cs
- CharEnumerator.cs
- SimpleWorkerRequest.cs
- NullableBoolConverter.cs
- Method.cs
- PointConverter.cs
- RectangleGeometry.cs
- CryptoApi.cs
- XmlSchemas.cs
- RoleManagerModule.cs
- mongolianshape.cs
- SqlProvider.cs
- IInstanceContextProvider.cs
- WebPartUtil.cs
- LocationUpdates.cs
- ImageBrush.cs
- xsdvalidator.cs
- HwndSourceKeyboardInputSite.cs
- HostedHttpContext.cs
- HttpRawResponse.cs
- ClientBuildManagerCallback.cs
- ScriptControlDescriptor.cs
- Int32Rect.cs
- NativeObjectSecurity.cs
- FileSecurity.cs
- WindowsIPAddress.cs
- _PooledStream.cs
- DataBoundControlHelper.cs
- WebConfigurationFileMap.cs
- SQLSingle.cs
- ViewService.cs
- ZipIOCentralDirectoryFileHeader.cs
- CacheOutputQuery.cs
- CharConverter.cs
- EntityDataSourceWizardForm.cs
- Size3DConverter.cs
- SQLSingleStorage.cs
- HandlerElement.cs
- SqlTriggerContext.cs
- DependencyPropertyHelper.cs
- FileDialogCustomPlace.cs
- DeflateInput.cs
- PageCanvasSize.cs
- LineMetrics.cs
- SmtpFailedRecipientsException.cs
- BlockUIContainer.cs
- ListenerElementsCollection.cs
- GridViewPageEventArgs.cs
- FormatException.cs
- DomNameTable.cs
- SqlMetaData.cs
- complextypematerializer.cs
- FileDialogCustomPlace.cs
- FrugalList.cs
- KeyValuePair.cs
- TokenizerHelper.cs
- AssertHelper.cs
- WindowsFormsHelpers.cs
- WebResponse.cs
- GradientSpreadMethodValidation.cs
- SqlFlattener.cs
- XPathNavigatorKeyComparer.cs
- HtmlInputRadioButton.cs
- AnalyzedTree.cs
- GenericNameHandler.cs
- CodeMethodInvokeExpression.cs
- BitmapMetadata.cs
- SettingsBindableAttribute.cs
- CodeMemberProperty.cs
- GridProviderWrapper.cs
- UpdateTracker.cs
- SqlFlattener.cs
- DynamicActivityTypeDescriptor.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- GridView.cs
- ObjectView.cs
- TransformerInfoCollection.cs
- Attributes.cs
- CommandManager.cs
- TextParentUndoUnit.cs
- QuaternionIndependentAnimationStorage.cs
- ContextQuery.cs
- Matrix3D.cs
- OleDbStruct.cs
- DataGridItemAttachedStorage.cs
- CustomAttributeSerializer.cs
- RangeContentEnumerator.cs
- MarkedHighlightComponent.cs
- BaseInfoTable.cs
- SQLSingleStorage.cs
- TargetControlTypeAttribute.cs
- EntityClientCacheKey.cs
- DataServiceHostFactory.cs
- DataServiceResponse.cs
- ControlAdapter.cs