Атомарно станд.:: вектор:: push_back () и индекс возврата

Я должен создать функцию, которая добавляет значение к вектору и возвращает индекс значения, которое было просто добавлено.

Пример:

int append(std::vector<int>& numbers, int number){
  int retval = numbers.size();
  // what if some other thread calls push_back(number) in between these calls?
  numbers.push_back(number);
  return retval;
}

Я хотел бы сделать это атомарно так, чтобы возвращенный индекс был всегда корректен, даже когда может быть несколько потоков, добавляющих значения к вектору. Это было бы легко если push_back возвращенный индекс объекта, просто добавленного. Как я могу гарантировать, что корректный индекс возвращается?

5
задан Agnel Kurian 10 August 2010 в 09:14
поделиться