표준 라이브러리 컨테이너 몇 가지 기본적인 스레드 안전을 제공 할 : 예를 들어,이 간단한 코드는 컨테이너 자체가 스레드 안전이 경우에도 경쟁 조건을 포함 용기는 안전보다.
모든 표준 라이브러리 컨테이너 보장 : 안전하지만
이이어야 한 작가 스레드가 경우
다중 동시가 같은 컨테이너에서 읽고, 그 다음 다른 작가 나 독자가 않습니다 더 스레드 안전 &이 없습니다.
표준 라이브러리 컨테이너는 주로 단일 스레드 환경에서 효율적으로 작동하도록 설계되었으며 기본 스레드 안전성 만 제공하면 동시 액세스가 필요없는 컨테이너의 전체 성능을 보장 할 수 있습니다.
기본 스레드 안전성은 사용자가 뮤텍스 또는 잠금을 사용하여 경쟁 조건을 피하기 위해 일종의 동기화 방법을 필요로합니다. 잠금 또는 다른 형식의 동기화는 일반적으로 비용이 많이 들고 따라서 불필요한 경우에는 피할 필요가 있습니다.
또한 표준 라이브러리 컨테이너에 의해 노출 된 인터페이스가 제공되므로 컨테이너 또는 컨테이너 사용자는 기본 컨테이너 작업을 잠금 획득 및 릴리스로 래핑하여 필요한 잠금을 제공하는 것이 쉽습니다 쓰레드 환경.
17.6.3.10 공유 객체 라이브러리 [res.on.objects]
: 모든 구현은 C++ 표준에 의해 지정된 다음과 같은 요구 사항을 준수
주 다른 스레드에서 표준 라이브러리 함수를 호출하면 데이터 경합이 발생할 수 있으므로 프로그램의 동작은 정의되지 않습니다. 이것이 발생할 수있는 조건은 17.6.4.8에 명시되어있다. [참고 : 스레드간에 공유되는 표준 라이브러리 유형의 객체를 수정하면 해당 유형의 객체가 데이터 경합없이 공유 가능하거나 사용자가 잠금 메커니즘을 제공하지 않는 한 정의되지 않은 동작이 발생할 위험이 있습니다.-end note]
스레드는 C++에서 0x까지 포함되지 않았습니다. 따라서 컨테이너가 없습니다. – Anycorn
비공식적으로, 대부분의 구현에서 '연산자 new'는 스레드로부터 안전합니다. 그래서 적어도 그 부분은 STL에서 스레드 안전성이 보장 될 수 있습니다. 또한, 모든 STL 컨테이너는 할당을위한 하나의'template' 인자를 가지고 있습니다. (일반적으로'std :: allocator'입니다.), 당신은 항상 당신 자신의 thread-safe 할당 메소드를 제공 할 수 있습니다. – iammilind