Я использую tbb::concurrent_vector nodes_ для параллельного добавления нескольких узлов в дерево. Проблема возникает, когда я пытаюсь вернуть nodes_.size(). Состояние гонки возникает, когда два потока добавляют узел одновременно, в результате чего nodes_.size() не возвращает желаемый результат.
Хотя я мог бы использовать мьютекс для решения этой гонки условии, это сведет на нет преимущества параллельного добавления узлов, делая concurrent_vector ненужным.
Есть ли способ продолжить использование concurrent_vector, избегая при этом условий гонки с размером ()?
Вот упрощенная версия моего кода, которая выполняется параллельно в нескольких потоках
int PTree::makeNode(int item) {
nodes_.push_back(PNode(item));
return nodes_.size() - 1;
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... allel-node
Состояние гонки в tbb::concurrent_vector при доступе к size() при параллельной вставке узла ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение