2015-11-18 4 views
0

мой вопрос в том, можно ли удалить элемент из внутреннего вектора, например vector<vector<Myclass> a; a[i].erease(a[i].begin());, если потоки работают на разных внутренних векторах? Я знаю, что modyfing вектор не является нитью, но в этом случае каждый поток имеет свой собственный вектор.Удалить вектор <вектор <MyClass>> сохранить нить?

+1

Если каждый вектор может использоваться ТОЛЬКО одним потоком, тогда нет необходимости в синхронизации потоков. Так что да, в этом случае это будет потокобезопасным. –

+0

Я согласен с @MohamadElghawi. В вашем случае, если каждый поток имеет свой собственный вектор, весь процесс является потокобезопасным. –

+0

Это интересно, потому что, например, push_back требует изменения размера для правильной работы. – Mehno

ответ

2

Удаление элемента в векторе при удалении вектора не thread safe.

Но безопасность потоков имеет смысл, если несколько потоков могут обращаться к тем же данным. Для однопоточной программы или если каждый поток обрабатывает только свои данные, даже небезопасная операция с потоком - это.

Таким образом, ответ таков: он не является потокобезопасным, но безвреден при условии, что к вектору может быть доступ только один поток.

+0

Вы уверены? Я должен использовать изменение размера, прежде чем я могу нажать_быть что-то в vecter >. Почему нет проблемы с erease/delete? – Mehno