Généralement le new
est thread-safe - cependant, les garanties de sécurité des threads pour les appels dans la STL et la bibliothèque standard sont régies par la norme - cela ne signifie pas qu'ils ne connaissent pas les threads - ils ont tendance à avoir des garanties très bien définies de sécurité des threads pour certaines opérations. Par exemple, parcourir une liste en lecture seule est thread-safe pour plusieurs lecteurs, tandis que parcourir une liste et effectuer des mises à jour ne l'est pas. Vous devez lire la documentation et voir quelles sont les différentes garanties, bien qu'elles ne soient pas si onéreuses et qu'elles aient tendance à avoir du sens.
Pendant que je parle de concepts que je n'ai pas utilisés, je pense que je devrais mentionner que si vous utilisez la mémoire partagée, vous voudrez probablement vous assurer que vous n'utilisez que des types de POD et utiliser le nouveau placement.
Deuxièmement, si vous utilisez la mémoire partagée comme on l'entend généralement sur les systèmes Linux, vous pouvez utiliser plusieurs processus - et non des threads, pour allouer de la mémoire et "faire des choses" - en utilisant la mémoire partagée comme couche de communication. Si tel est le cas, la sécurité des threads de votre application et de vos bibliothèques n'est pas importante - ce qui est important, cependant, c'est la sécurité des threads de tout ce qui utilise l'allocation de mémoire partagée ! Il s'agit d'une situation différente de l'exécution d'un processus avec de nombreux threads, auquel cas la question de la sécurité des threads du nouvel opérateur EST une préoccupation valable, et pourrait être résolue en plaçant new si ce n'est pas le cas, ou en définissant vos propres répartiteurs.
Vous devrez chercher très fort pour trouver une plate-forme qui supporte les threads mais qui n'a pas de thread safe new
. En fait, la sécurité des threads de new
(et malloc
) est l'une des raisons pour lesquelles il est si lent.
Si vous voulez un STL thread-safe, vous pouvez envisager Intel TBB qui a des conteneurs compatibles avec les threads (bien que toutes les opérations sur ceux-ci ne soient pas thread-safe).