TBB流程图条件执行和多个输入和输出

时间:2016-08-03 10:23:49

标签: c++ multithreading intel tbb tbb-flow-graph

我看过join()并且问题略有不同。

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

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

  1. some_nodestart_msg发送some_node

  2. 如果continue_msg为空,end_node会向some_node发送continue_msg,否则data_msg会向自己发送end_node AND continue_msgsome_node

  3. 如果continue_msg收到end_node,则检查之前的start_msg是否为空,如果是,则data_msg发送给 +--continue_msg--+ | | +-----+ +-----+ | | | | +----data_msg---+ v | / \ start_node --start_msg--> some_node end_node \ / +--continue_msg--+ ,否则为{ {1}}已发送。

    start_msg
  4. 我正在处理的一个问题:即使大小已知,我也不能说start_msg内有多少好元素(假设tbb::concurrent_vector<T>拥有some_node。如果some_node找到了错误的元素,则会忽略该元素,continue_msg会向自身发送eval $(docker-machine env default) docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default * digitalocean Running tcp://***.**.***.***:**** v1.12.0

1 个答案:

答案 0 :(得分:1)

看起来,source_node可用于您的算法。 source_node可以根据需要生成尽可能多的邮件。所以算法可以稍微改写一下:

source_node -> ... -> end_node

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

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

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