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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.