英特尔 TBB input_node 输出值缓存延迟资源释放。解决方法?

Intel TBB input_node output value caching delays resource release. Workaround ideas?

我是英特尔线程构建模块的新手,正在使用流程图组件。到目前为止,它基本上运作良好。我在节点之间的消息是 shared_ptr 类型,因此它们是可复制构造的、轻量级的,并且底层资源在图循环结束时被处理...

来自我 input_node 的消息除外。 input_node 的设计使其保留其最后输出值的副本。这意味着 input_node 输出的值所持有的任何资源在 input_node 生成下一个输出之前不会被释放。

这似乎awkward/inconsistent与其余API。关于如何处理它的任何想法?我想我可以编写自己的节点,但我不想这样做。我应该只使用 try_put 吗?如果是这样,我如何让图表知道我何时提供输入,以便 wait_for_all 不会提前结束?

一个简单的解决方法是让 input_node 生成一条不使用 shared_ptr 类型的消息,并立即提供给 function_node,其输出使用任何 shared_ptr 您想要传播并在传播完成后收集的类型。感觉有点傻,但效果很好。 input_node 之外可能还有其他节点进行缓存,但我正在使用 function_nodemultifunction_nodeindexer_node,但没有任何证据表明 input_node 进行了缓存.

顺便说一句,当我 google 一个问题并最终解决我自己关于 Whosebug 的一个问题时,它总是让我有点毛骨悚然,而且它已经足够长以至于我不记得发帖了这个问题。当我没有看到答案时,它也会增加一些失望情绪。 ;-)

至少在我回来的时候,我已经习惯了 TBB 数据流,所以很容易找到一个简单的解决方法。