Parallel Patterns Library(PPL) - concurrent_vector - 1
VC++ 10 Concurrency Runtime 2009. 11. 29. 08:30Visual Stuido 2010 Beta2가 나오면서 제가 기대하고 있었던 병렬 컨테이너가 드디어 구현되었습니다.
Concurrency Runtime(이하 ConRT)에는 총 3개의 병렬 컨테이너를 제공합니다. Beta2에서는 모두 다 구현되지는 못하고 concurrent_vector와 concurrent_queue 두 개가 구현되었습니다. 아직 구현되지 않은 것은 concurrent_hash_map 입니다.
세 개의 컨테이너들은 C++ STL의 컨테이너 중에서 가장 자주 사용하는 것으로 vector, deque, hash_map 컨테이너의 병렬 버전이라는 것을 이름을 보면 쉽게 알 수 있을 것입니다.
STL에 있는 컨테이너와 비슷한 이름을 가진 것처럼 사용 방법도 기존의 컨테이너와 비슷합니다. 다만 병렬 컨테이너 답게 스레드 세이프하며, 기존의 컨테이너에서 제공하는 일부 기능을 지원하지 못하는 제한도 있습니다.
몇 회에 나누어서 concurrent_vector와 concurrent_queue에 대해서 설명해 나가겠습니다.
이번에는 첫 번째로 concurrent_vector에 대한 것입니다.
concurrent_vector란?
STL의 vector와 같이 임의 접근이 가능한 시퀀스 컨테이너입니다. concurrent_vector는 멀티 스레드에서 요소를 추가하던가 특정 요소에 접근해도 안전합니다. 반복자의 접근과 순회는 언제나 멀티 스레드에서 안전해야 하므로 요소를 추가할 때는 기존의 인덱스와 반복자를 무효화 시키면 안됩니다.
concurrent_vector와 vector의 차이점
기능 |
vctor |
Concurrent_vector |
추가 |
스레드에 안전하지 않음 |
스레드에 안전 |
요소에 접근 |
스레드에 안전하지 않음 |
스레드에 안전 |
반복자 접근 및 순회 |
스레드에 안전하지 않음 |
스레드에 안전 |
push_back |
가능 |
가능 |
insert |
가능 |
불가능 |
clear |
모두 삭제 |
모두 삭제 |
erase |
가능 |
불가능 |
pop_back |
가능 |
불가능 |
배열식 접근 예. &v[0]+2 |
가능 |
불가능 |
|
|
grow_by, grow_to_at_least (vector의 resize와 비슷)는 스레드에 안전 |
|
|
추가 또는 resize 때 기존 인덱스나 반복자의 위치가 바뀌지 않음 |
|
|
bool 형은 정의 되지 않았음 |
concurrent_vector에 대한 설명을 이번에는 소개 정도로 끝내고 다음부터는 본격적으로 Concurrent_vector을 어떻게 사용하면 되는지 상세하게 설명해 나가겠습니다.^^
'VC++ 10 Concurrency Runtime' 카테고리의 다른 글
Parallel Patterns Library(PPL) - concurrent_queue - 1 (0) | 2009.12.18 |
---|---|
Parallel Patterns Library(PPL) - concurrent_vector - 2 (2) | 2009.12.09 |
Parallel Patterns Library(PPL) - task group에서의 병렬 작업 취소 - 2 (0) | 2009.11.16 |
Parallel Patterns Library(PPL) - task group에서의 병렬 작업 취소 - 1 (0) | 2009.11.10 |
Parallel Patterns Library(PPL) - combinable (0) | 2009.10.28 |