Bezpečný přístup z více vláken ve standardní knihovně C++

Následující pravidla zabezpečení vláken platí pro všechny třídy standardní knihovny C++ – to zahrnuje shared_ptr, jak je popsáno níže. Někdy jsou poskytovány silnější záruky – například standardní objekty iostream, jak je popsáno níže, a typy určené pro multithreading, jako jsou ty v <atomic>.

Objekt je bezpečný pro čtení z více vláken. Například vzhledem k objektu A je bezpečné číst A z vlákna 1 a z vlákna 2 současně.

Pokud je objekt zapsán do jednoho vlákna, musí být všechny čtení a zápisy do daného objektu na stejném nebo jiném vlákně chráněny. Pokud například vlákno 1 zapisuje do A objekt A, musí být vlákno 2 znemožněno čtení nebo zápisu do A.

Je bezpečné číst a zapisovat do jedné instance typu, i když jiné vlákno čte nebo zapisuje do jiné instance stejného typu. Například vzhledem k objektům A a B stejného typu je bezpečné, když se A zapisuje ve vlákně 1 a B se čte ve vlákně 2.

shared_ptr

Více vláken může současně číst a zapisovat různé shared_ptr objekty, i když jsou objekty kopiemi, které sdílejí vlastnictví.

iostream

Standardní objekty ciniostream , , , cerrwcinclogwcoutcoutwcerra wclog dodržovat stejná pravidla jako ostatní třídy, s touto výjimkou: je bezpečné zapisovat do objektu z více vláken. Například vlákno 1 může zapisovat na cout stejnou dobu jako vlákno 2. To však může způsobit, že výstup ze dvou vláken bude intermixován.

Poznámka:

Čtení z vyrovnávací paměti datového proudu se nepovažuje za operaci čtení. Místo toho se považuje za operaci zápisu, protože se změnil stav třídy.

Viz také

Standardní knihovna C++ – přehled