C++ 표준 라이브러리의 스레드 보안
다음 스레드 보안 규칙은 C++ 표준 라이브러리의 모든 클래스에 적용됩니다. 아래에서 설명하는 것처럼 이 라이브러리에는 shared_ptr
이 포함됩니다. 아래에서 설명한 대로 표준 iostream 개체와 같은 다중 스레딩을 위한 형식과 같은 더 강력한 보장이 제공되는 경우도 있습니다 <atomic>
.
개체는 여러 스레드에서 읽기 위해 스레드로부터 안전하게 보호됩니다. 예를 들어 개체 A가 있다고 가정하면 스레드 1과 스레드 2에서 개체 A를 동시에 안전하게 읽을 수 있습니다.
스레드 하나에서 개체에 쓰는 경우 동일하거나 다른 스레드에서 해당 개체에 대한 모든 읽기 및 쓰기가 보호되어야 합니다. 예를 들어 개체 A가 있다고 가정하면 스레드 1이 A에 쓰는 경우 스레드 2는 A에서 읽거나 A에 쓸 수 없어야 합니다.
다른 스레드가 동일한 형식의 다른 인스턴스를 읽거나 쓰는 경우에도 형식의 한 인스턴스를 읽고 쓰는 것이 안전합니다. 예를 들어 동일한 형식의 개체 A와 B가 지정된 경우 A가 스레드 1에서 작성되고 B가 스레드 2에서 읽히는 경우 안전합니다.
shared_ptr
개체가 소유권을 공유하는 복사본인 경우에도 여러 스레드가 동시에 다른 shared_ptr
개체를 읽고 쓸 수 있습니다.
iostream
표준 iostream 개체cin
, cout
, cerr
, clog
, wcin
, wcout
wcerr
및 다른 클래스와 wclog
동일한 규칙을 따릅니다. 이 예외는 여러 스레드에서 개체에 쓰는 것이 안전합니다. 예를 들어 스레드 1은 스레드 2와 동시에 쓸 cout
수 있습니다. 그러나 이로 인해 두 스레드에서 나온 출력이 섞일 수 있습니다.
참고 항목
스트림 버퍼에서의 읽기는 읽기 작업으로 간주되지 않습니다. 대신 클래스의 상태가 변경되므로 쓰기 작업으로 간주됩니다.