나는 내 자신의 RingBuffer을 구현했지만, .NET에는 하나도 없다는 것에 놀랐다. 또는 단순히 스레드 안전 큐, 목록 또는 컬렉션?.NET에는 스레드로부터 안전한 일반 클래스가 있습니까?
.NET에 스레드 안전 클래스가 포함되어있는 이유는 무엇입니까? 그들은 미래를 계획하고 있습니까?
나는 내 자신의 RingBuffer을 구현했지만, .NET에는 하나도 없다는 것에 놀랐다. 또는 단순히 스레드 안전 큐, 목록 또는 컬렉션?.NET에는 스레드로부터 안전한 일반 클래스가 있습니까?
.NET에 스레드 안전 클래스가 포함되어있는 이유는 무엇입니까? 그들은 미래를 계획하고 있습니까?
일반용 컬렉션 클래스의 스레드 안전성은 의심스러운 값입니다. 더 자주는 아니지만 스레드 안전성을 위해 실제로는 개별 작업 (예 : Add
또는 인덱서)이 필요하지 않지만 그룹보다는 오히려 그룹이 필요합니다. 스레드 안전성을 보장합니다. 예를 들어, 한 스레드가 새 항목을 컬렉션에 삽입하고 다른 스레드가 인덱서를 통해 루프의 항목에 액세스하는 경우 컬렉션의 두 메서드가 모두 잠글 때 문제가되지 않습니다. 코드는 여전히 손상됩니다. 즉, Hashtable
과 같이 System.Collections
에있는 일부 오래된 비 제너릭 컬렉션 클래스는 스레드로부터 안전합니다. 자신의 누락, 가능성이 디자인으로 정말하지 않습니다하지만, 감독의 이상 (또는 있도록
이제 스레드 안전 Queue
및 Stack
클래스는, (자신의 프로토콜의 한계는 일반적으로 동시 액세스에 적합하게) 실제로 유용 , 제한된 자원). 그러나 .NET에서 ConcurrentQueue
및 ConcurrentStack
를 볼 수 있습니다 4.0
그들은 .NET 4.0에 존재합니다. System.Threading.Collections 네임 스페이스를 믿습니다 (또는 보았던 마지막 CTP의 네임 스페이스입니다).
닷넷 4.0 프레임 워크는 System.Collections.Concurrent 네임 스페이스에 여러 개의 스레드 안전 컬렉션을 소개합니다
ConcurrentBag 는 스레드 안전, 정렬되지 않은 나타냅니다 개체의 컬렉션입니다.
ConcurrentDictionary 여러 스레드가 동시에 액세스 할 수있는 키 - 값 쌍의 스레드 안전 집합을 나타냅니다.
ConcurrentQueue 스레드로부터 안전한 FIFO (First In First Out) 컬렉션을 나타냅니다.
ConcurrentStack 스레드 안전 LIFO (Last In First Out) 컬렉션을 나타냅니다.
아, 네. SyncRoot 나는 믿습니다. –