2009-07-27 6 views

답변

3

일반용 컬렉션 클래스의 스레드 안전성은 의심스러운 값입니다. 더 자주는 아니지만 스레드 안전성을 위해 실제로는 개별 작업 (예 : Add 또는 인덱서)이 필요하지 않지만 그룹보다는 오히려 그룹이 필요합니다. 스레드 안전성을 보장합니다. 예를 들어, 한 스레드가 새 항목을 컬렉션에 삽입하고 다른 스레드가 인덱서를 통해 루프의 항목에 액세스하는 경우 컬렉션의 두 메서드가 모두 잠글 때 문제가되지 않습니다. 코드는 여전히 손상됩니다. 즉, Hashtable과 같이 System.Collections에있는 일부 오래된 비 제너릭 컬렉션 클래스는 스레드로부터 안전합니다. 자신의 누락, 가능성이 디자인으로 정말하지 않습니다하지만, 감독의 이상 (또는 있도록

이제 스레드 안전 QueueStack 클래스는, (자신의 프로토콜의 한계는 일반적으로 동시 액세스에 적합하게) 실제로 유용 , 제한된 자원). 그러나 .NET에서 ConcurrentQueueConcurrentStack를 볼 수 있습니다 4.0

+0

아, 네. SyncRoot 나는 믿습니다. –

1

그들은 .NET 4.0에 존재합니다. System.Threading.Collections 네임 스페이스를 믿습니다 (또는 보았던 마지막 CTP의 네임 스페이스입니다).

0

닷넷 4.0 프레임 워크는 System.Collections.Concurrent 네임 스페이스에 여러 개의 스레드 안전 컬렉션을 소개합니다

ConcurrentBag 는 스레드 안전, 정렬되지 않은 나타냅니다 개체의 컬렉션입니다.

ConcurrentDictionary 여러 스레드가 동시에 액세스 할 수있는 키 - 값 쌍의 스레드 안전 집합을 나타냅니다.

ConcurrentQueue 스레드로부터 안전한 FIFO (First In First Out) 컬렉션을 나타냅니다.

ConcurrentStack 스레드 안전 LIFO (Last In First Out) 컬렉션을 나타냅니다.

관련 문제