A>В МСДНе не понятно написано

Класс или шаблон, аналогичный std::vector по интерфейсу, сделать "потокобезопасным" сам по себе невозможно по принципиальным соображениям. Например:
void f(std::vector<int>& v)
{
  std::size_t sz = v.size();
  for (std::size_t i = 0; i < sz; ++i)
    std::cout << v[[i];
}

Вне зависимости от степени "потокобезопасности" std::vector, без дополнительной синхронизации, функция f не будет "потокобезопасной", если есть хотя бы один поток, который может модифицировать v одновременно с выполнением f. В самом деле: если после получения v.size() другой поток, например, уменьшит размер вектора, то произойдет обращение к "чужой" памяти.

Никак, кроме "нормальной", внешней по отношению к std::vector, синхронизации, это не "лечится".

--
Павел Кузнецов
MetaCommunications Engineering
http://www.meta-comm.com/engineering/
Автор: Павел Кузнецов    Оценить