Thread Safety in the Standard C++ Library
Container Classes (vector, deque, list, queue, stack , priority_queue, valarray, map, multimap, set, multiset, basic_string, bitset) and complex
For reads to the same object, the object is thread safe for reading:
- From one thread at a time when no writers on other threads.
- From many threads at a time when no writers on other threads.
For writes to the same object, the object is thread safe for writing from one thread when no readers on other threads
For reads to different objects of the same class, the object is thread safe for reading:
- From one thread at a time.
- From one thread at a time when no writers on other threads.
- From many threads at a time.
- From many threads at a time when no writers on other threads.
For writes to different objects of the same class, the object is thread safe for writing:
- From one thread when no readers on other threads.
- From many threads.
iostream Classes
Note that reading from a stream buffer is not considered to be a read operation. It should be considered as a write operation, because this changes the state of the class.
For reads to the same object, the object is thread safe for reading:
- From one thread at a time when no writers on other threads.
- From many threads at a time when no writers on other threads.
For writes to the same object, , the object is thread safe for writing:
- From one thread when no readers on other threads.
- From many threads (when accesses are limited to stream buffers).
For reads to different objects of the same class, , the object is thread safe for reading:
- From one thread at a time.
- From one thread at a time when no writers on other threads.
- From many threads at a time.
- From many threads at a time when no writers on other threads.
For writes to different objects of the same class, the object is thread safe for writing:
- From one thread when no readers on other threads
- From many threads