2016-08-03 113 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作爲最後一個元素的指示。

不幸的是,我不知道原來的算法,我的建議可能不合適。如果它不符合您的需求,您能否提供更多細節?