Состояние гонки в tbb::concurrent_vector при доступе к size() при параллельной вставке узлаC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Состояние гонки в tbb::concurrent_vector при доступе к size() при параллельной вставке узла

Сообщение Anonymous »

Я использую 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»