Lorsque vous dites qu'ils sont thread safe, vous voulez probablement dire que vous pouvez les utiliser dans plusieurs threads sans avoir à verrouiller quoi que ce soit.
En théorie, vous pourriez potentiellement avoir 2 threads, l'un poussant vers l'arrière et l'autre vers l'avant, et vous vous en sortiriez probablement, mais je me méfierais car l'implémenteur n'a pas la garantie de le rendre thread safe, car les itérateurs deviennent invalidés avec des insertions à chaque extrémité, si l'implémentation de push_back utilisait "end" et de push_front utilisait "begin", cela serait invalidé dans l'appel par l'autre thread, et pourrait vous exploser à la figure.
std::priority_queue n'est presque certainement pas utilisable dans deux threads ensemble, vraisemblablement pour les threads producteurs/consommateurs, avec un pushing et un popping et vous devrez verrouiller en premier.
J'ai découvert que lorsque j'ai écrit une file d'attente producteur/consommateur basée sur std::deque, j'ai permis au producteur de pousser plus d'un élément à la fois, et au consommateur de balayer toute la file d'attente à traiter. Cela signifie qu'il n'y a qu'un seul verrou par insertion en masse, ce qui réduit le nombre de verrouillages nécessaires.