У меня есть несколько потоков, одновременно вызывающих push_back () на общем объекте std :: vector. Является ли std :: vector thread safe?
blockquote>Это небезопасно.
Или мне нужно реализовать механизм сам, чтобы сделать его потокобезопасным?
blockquote>Да.
Я хочу избежать выполнения дополнительной операции «блокировки и освобождения», потому что я являюсь пользователем библиотеки, а не разработчиком библиотеки. Я надеюсь найти существующие поточно-безопасные решения для вектора.
blockquote>Ну, векторный интерфейс не является оптимальным для одновременного использования. Это нормально, если клиент имеет доступ к блокировке, но для интерфейса для абстрактной блокировки для каждой операции - нет. Фактически, интерфейс вектора не может гарантировать безопасность потока без внешней блокировки (предполагая, что вам нужны операции, которые также мутируют).
Как насчет boost :: vector, который был недавно введен с boost 1.48.0 onward ,
blockquote>Состояние документов:
//! boost::container::vector is similar to std::vector but it's compatible //! with shared memory and memory mapped files.