Стандартные контейнеры c ++ не являются потокобезопасными, потому что вы, скорее всего, на самом деле хотите блокировку более высокого уровня, чем сами контейнеры. Другими словами, вы, вероятно, захотите, чтобы две или более операции были безопасными вместе.
Например, если у вас запущено несколько потоков:
v.push_back(0);
v.push_back(1);
Вы не получите хороший вектор чередования 0 и 1, они могут быть перемешаны. Вам нужно заблокировать обе команды, чтобы получить то, что вы хотите.