Obecně new
Operator is thread safe - nicméně záruky bezpečnosti vláken pro volání do STL a standardní knihovny se řídí standardem - to neznamená, že by o vláknech nevěděli - mívají velmi dobře definované záruky bezpečnosti vláken pro určité operace. Například iterace seznamu způsobem pouze pro čtení je pro více čtenářů bezpečná pro vlákna, zatímco iterace seznamem a provádění aktualizací nikoli. Musíte si přečíst dokumentaci a zjistit, jaké jsou různé záruky, i když nejsou tak náročné a mají tendenci dávat smysl.
Zatímco mluvím o konceptech, které jsem nepoužil, mám pocit, že bych měl zmínit, že pokud používáte sdílenou paměť, pak pravděpodobně budete chtít zajistit, že budete používat pouze typy PODů a použít nové umístění.
Za druhé, pokud používáte sdílenou paměť, jak je běžně chápáno na linuxových systémech, pak možná používáte více procesů – ne vlákna, k alokaci paměti a „provádění věcí“ – pomocí sdílené paměti jako komunikační vrstvy. Pokud je tomu tak, pak bezpečnost vláken vaší aplikace a knihoven není důležitá – důležitá je však bezpečnost vláken čehokoli, co používá alokaci sdílené paměti! Toto je jiná situace než spuštění jednoho procesu s mnoha vlákny, v takovém případě je otázka bezpečnosti vlákna nového operátora oprávněná a lze ji vyřešit umístěním nového, pokud tomu tak není, nebo definováním vlastních alokátorů.
Budete muset velmi složitě hledat platformu, která podporuje vlákna, ale nemá vlákno bezpečné new
. Ve skutečnosti je bezpečnost vlákna new
(a malloc
) je jedním z důvodů, proč je tak pomalý.
Pokud na druhou stranu chcete STL bezpečný pro vlákna, můžete zvážit Intel TBB, který má kontejnery podporující vlákna (ačkoli ne všechny operace na nich jsou bezpečné pro vlákna).