мой вопрос в том, можно ли удалить элемент из внутреннего вектора, например vector<vector<Myclass> a; a[i].erease(a[i].begin());
, если потоки работают на разных внутренних векторах? Я знаю, что modyfing вектор не является нитью, но в этом случае каждый поток имеет свой собственный вектор.Удалить вектор <вектор <MyClass>> сохранить нить?
0
A
ответ
2
Удаление элемента в векторе при удалении вектора не thread safe.
Но безопасность потоков имеет смысл, если несколько потоков могут обращаться к тем же данным. Для однопоточной программы или если каждый поток обрабатывает только свои данные, даже небезопасная операция с потоком - это.
Таким образом, ответ таков: он не является потокобезопасным, но безвреден при условии, что к вектору может быть доступ только один поток.
+0
Вы уверены? Я должен использовать изменение размера, прежде чем я могу нажать_быть что-то в vecter
Если каждый вектор может использоваться ТОЛЬКО одним потоком, тогда нет необходимости в синхронизации потоков. Так что да, в этом случае это будет потокобезопасным. –
Я согласен с @MohamadElghawi. В вашем случае, если каждый поток имеет свой собственный вектор, весь процесс является потокобезопасным. –
Это интересно, потому что, например, push_back требует изменения размера для правильной работы. – Mehno