.NET의 스레드로부터 안전한 HashSet 대안
이 문서에서는 .NET에서 HashSet
컬렉션을 관리하기 위한 스레드로부터 안전한 접근 방식을 살펴보고 수동 잠금에 대한 대안을 제공합니다. 귀하의 예에서는 유효하지만 잠재적으로 오류가 발생하기 쉬운 방법인 HashSet
작업에 대한 사용자 정의 잠금을 사용합니다. 더 나은 옵션을 살펴보겠습니다.
.NET
프레임워크는 ConcurrentDictionary
네임스페이스 내의 System.Collections.Concurrent
클래스를 우수한 솔루션으로 제공합니다. ConcurrentDictionary
은 스레드로부터 안전한 해시 테이블 기능을 제공하여 동시 읽기 및 쓰기를 효율적으로 처리합니다. 사용 방법은 다음과 같습니다.
<code class="language-csharp">private ConcurrentDictionary<string, byte[]> _data;</code>
또는 사용자 정의 ConcurrentHashSet
클래스를 만들 수도 있습니다. 이 접근 방식에는 스레드 안전을 보장하기 위한 내부 잠금 메커니즘이 포함됩니다. 샘플 구현은 다음과 같습니다.
<code class="language-csharp">public class ConcurrentHashSet<T> : IDisposable { private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); private readonly HashSet<T> _hashSet = new HashSet<T>(); public bool Add(T item) { ... } //Implementation as in original example public void Clear() { ... } //Implementation as in original example public bool Contains(T item) { ... } //Implementation as in original example public bool Remove(T item) { ... } //Implementation as in original example public int Count { ... } //Implementation as in original example public void Dispose() { ... } //Implementation as in original example protected virtual void Dispose(bool disposing) { ... } //Implementation as in original example ~ConcurrentHashSet() { ... } //Implementation as in original example }</code>
(참고: ...
은 간결성을 위해 원래 예제의 코드를 여기에 삽입해야 함을 나타냅니다.)
ConcurrentDictionary
또는 잘 구현된 ConcurrentHashSet
을 사용하면 수동 잠금에 비해 코드 명확성이 크게 향상되고 동기화 오류 위험이 줄어듭니다. 이러한 내장 솔루션은 성능과 스레드 안전성에 최적화되어 있습니다.
위 내용은 .NET에서 스레드로부터 안전한 HashSet 작업을 달성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!