2016-08-03 28 views
0

我读过TBB flow graph conditional execution并有一个稍有不同的问题。TBB流程图条件执行AND多重输入和输出

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

我附上了一个简单的例子,我想如何设计图。用TBB流程图运行最困难的方式是什么?

  1. start_node发送start_msgsome_node

  2. 如果start_msg是空的,some_node发送continue_msgend_node,否则some_node发送continue_msg本身和A,如果continue_msgdata_msgend_node

  3. 收到some_node,检查之前的start_msg如果是空的,如果是,则发送continue_msgend_node,否则发送data_msg。我处理

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

一个问题:我不能说有多少好元素的start_msg内甚至是大小是已知的(比方说start_msg持有tbb::concurrent_vector<T>如果some_node找到损坏。元素,它会被忽略,some_node被发送continue_msg本身。

回答

1

它看起来像,在source_node可以在算法中使用。因为你需要source_node可以产生尽可能多的信息。因此,该算法可以进行返工位:

source_node -> ... -> end_node 

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

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

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