我看过join()
并且问题略有不同。
是否可以创建具有多个输入和多个输出的节点并通过条件变量控制执行?也许没有丑陋的演员。
我附上了一个简单的例子,我想如何设计图表。如何使用TBB流程图运行它的最佳方式?
some_node
向start_msg
发送some_node
如果continue_msg
为空,end_node
会向some_node
发送continue_msg
,否则data_msg
会向自己发送end_node
AND continue_msg
到some_node
如果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
我正在处理的一个问题:即使大小已知,我也不能说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
。
答案 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
作为最后一个元素的指示。
不幸的是,我不知道原始算法,我的建议可能不合适。如果它不符合您的需求,您能提供更多细节吗?