Допустим, у меня есть вектор из N элементов, но до n элементов этого вектора имеют значимые данные.Один поток обновлений обновляет n-й или n + 1-й элемент (затем устанавливает n = n + 1), также проверяет, слишком ли n слишком близко к N, и при необходимости вызывает vector :: resize (N + M).После обновления поток вызывает несколько дочерних потоков, чтобы прочитать до n-ых данных и выполнить некоторые вычисления.
Гарантируется, что дочерние потоки никогда не изменяют и не удаляют данные (фактически никакие данные не удаляются), а программа обновления вызывает дочерние процессы сразу после завершения обновления.
Пока что никаких проблем не возникало, но я хочу спросить, может ли проблема возникнуть при перераспределении вектора в больший блок памяти, если после предыдущего обновления осталось несколько дочерних рабочих потоков.
Илибезопасно ли использовать vector, так как он не является потокобезопасным, в таком многопоточном случае?
EDIT: поскольку только вставка происходит, когда средство обновления вызывает vector :: resize (N + M, 0),Есть ли возможные варианты решения моей проблемы?Из-за высокой производительности вектора STL я не хочу заменять его на блокируемый вектор, или в этом случае существуют какие-либо производные, известные и свободные от блокирования векторы?