0

我已经阅读了TBB 流程图条件执行并且有一个稍微不同的问题。

是否可以创建具有多个输入和多个输出的节点并通过条件变量控制执行?也许没有丑陋的演员表。

我附上了一个简单的例子,我想如何设计图表。使用 TBB 流程图运行它的最佳方法是什么?

  1. start_node发送start_msgsome_node

  2. 如果start_msg为空,则some_node发送 acontinue_msgend_node,否则some_node将 a 发送continue_msg到自身 AND adata_msgend_node

  3. 如果continue_msg由 接收some_node,则检查先前的 start_msg 是否为空,如果是,则 acontinue_msg发送到end_node,否则 adata_msg发送。

                         +--continue_msg--+
                         |                |
                         +-----+    +-----+
                               |    |
                               |    |   +----data_msg---+
                               v    |  /                 \
    start_node --start_msg--> some_node                    end_node
                                       \                  /
                                        +--continue_msg--+
    

我正在处理的一个问题:我不能说有多少好的元素在start_msgeven 是已知的大小(假设start_msg持有 a tbb::concurrent_vector<T>。如果some_node找到一个坏元素,它将被忽略some_node并将 a 发送continue_msg给它自己。

4

1 回答 1

1

看起来,source_node可以在您的算法中使用。source_node可以根据需要生成尽可能多的消息。所以算法可以稍微修改一下:

source_node -> ... -> end_node

为什么你需要一个continue_msg被发送到的end_node?标记最后一条消息?也许,您可以使用 astd::pair<T,bool>其中第一个元素是数据,第二个元素是最后一条消息的指示。

的 Body 在 中source_node找到有效元素tbb::concurrent_vector<T>,创建一条新消息make_pair(Data, false)true为每个 Body 调用返回。当从容器中提取最后一个元素时,它会创建make_pair(Data, true)并返回false作为最后一个元素的指示。

不幸的是,我不知道原始算法,我的建议可能不合适。如果它不适合您的需求,您能否提供更多详细信息?

于 2016-08-04T13:48:23.203 回答