Есть ли способ отправить «тяжелый» типы между узлами в tbb :: flow :: graph?

Мне нужно отправить некоторые «тяжелые» типы между узлами в tbb :: flow :: graph (библиотека Intel TBB), т.е. структура с динамическими массивами внутри. Если я пытаюсь создать экземпляр такой структуры в одном узле и отправить указатель на него другому узлу, я получаю нарушение прав доступа (и это ожидается, потому что я пытаюсь использовать данные из другого потока).

Таким образом, единственный способ передать такие аргументы — это передать их по значению, используя соответствующий конструктор копирования, не так ли? Но тогда мы будем тратить много времени на копирование …

ОБНОВИТЬ: πάντα ῥεῖ предлагает использовать std :: unique_ptr для передачи таких типов через узлы. Но боюсь, я не понимаю, как это реализовать. Например, как использовать std :: unique_ptr с source_node?

ОБНОВЛЕНИЕ 2: используя std :: unique_ptr<> дает C2280 «попытку сослаться на удаленную функцию» в строке 287 flow_graph.h.

Так что вопрос все еще открыт.

1

Решение

Максимум,

К сожалению std::unique_ptr не имеет собственности CopyConstructible, что является обязательным условием для сообщений объекта, передаваемых flow::graph,

Вы можете попробовать std::shared_ptr, который имеет свойство. Мы исправили проблемы с удержанием объектов в буферах (из-за чего большие объекты сохранялись до сброса графа ()). Если вы обнаружите какие-либо проблемы с ним, пожалуйста, сообщите нам об этом.

С Уважением,
Крис

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]