Мне нужно отправить некоторые «тяжелые» типы между узлами в tbb :: flow :: graph (библиотека Intel TBB), т.е. структура с динамическими массивами внутри. Если я пытаюсь создать экземпляр такой структуры в одном узле и отправить указатель на него другому узлу, я получаю нарушение прав доступа (и это ожидается, потому что я пытаюсь использовать данные из другого потока).
Таким образом, единственный способ передать такие аргументы — это передать их по значению, используя соответствующий конструктор копирования, не так ли? Но тогда мы будем тратить много времени на копирование …
ОБНОВИТЬ: πάντα ῥεῖ предлагает использовать std :: unique_ptr для передачи таких типов через узлы. Но боюсь, я не понимаю, как это реализовать. Например, как использовать std :: unique_ptr с source_node?
ОБНОВЛЕНИЕ 2: используя std :: unique_ptr<> дает C2280 «попытку сослаться на удаленную функцию» в строке 287 flow_graph.h.
Так что вопрос все еще открыт.
Максимум,
К сожалению std::unique_ptr
не имеет собственности CopyConstructible
, что является обязательным условием для сообщений объекта, передаваемых flow::graph
,
Вы можете попробовать std::shared_ptr
, который имеет свойство. Мы исправили проблемы с удержанием объектов в буферах (из-за чего большие объекты сохранялись до сброса графа ()). Если вы обнаружите какие-либо проблемы с ним, пожалуйста, сообщите нам об этом.
С Уважением,
Крис
Других решений пока нет …