LINUX.ORG.RU

std::vector change on ... ?


0

0
Здраствуйте.

А "пробег" по вектору thread-safe?

Т.е. есть thread_func :

//...

vec_type::iterator it = testVec.begin(), end = testVec.end();

for ( ; it != end ; ++it ) // do something

//...

В до something будет входить только изменение элемента вектора, но не удаление и включение новых.

Если пробег не тред-сейв посоветуйте как смастерить тред-сейв контейнер для объектов или его аналог в std.

Спасбо.

★★★
Изначально STL не проектировалась как thread-safe, однако все зависит от используемой реализации реализации...

aton
()
блокировать мьютексом при обращение, едиственный портабельный способ
fghj ★★★★★
()
Честно говоря, я не понял вопрос. Если ты будешь знать, что вектор внутри устроен как обычный массив, и что это гарантируется стандартом, тебе это как-то поможет? Итератор у тебя свой в каждой нити, так что никаких проблем с многопоточностью здесь нет и быть не может.

Другой вопрос, что будет, если "do something" случится одновременно для одного и того же элемента в разных нитях?

Вообще, ответ на твой вопрос скорее утвердительный, чем отрицательный ;)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.