2013-02-21 39 views
0

我想通過將pthread分解爲線程來解決表達式。如何使用多個pthread來評估程序中的表達式

我的問題是: - 如果像(A + B)+(C + d)+的表達式(E + F),使用並行線程,使得進行評估: -

  1. 創建3個線程,其中第一由第一線程評估表達式(a + b),由第二線程評估的(c + d)和由第三線程評估的(e + f)。
  2. 所有上述變量的值都是'1',所以表達式評估的最終答案應該是'6'。
  3. 第三個線程應該在最後執行,它將打印最終輸出爲'6'。

那麼該怎麼做?

回答

1

當你解析表達式,你會得到一個抽象語法樹類似如下:

    + 
       /\ 
       + + 
      /\/\ 
       + + e f 
      /\ |\ 
      a b c d 

您可以在語法樹的節點劃分問題成線。在評估節點時,可以將兩個不同的子問題(左右子樹)分配給兩個不同的線程。每個子線程都可以重複該模式,直到已經足夠並行化樹。在代碼中,這可能是這樣的:

int evaluate_subtree_threaded(node_t* parent_node) 
{ 
    int left_result, right_result; 
    pthread_t thread; 

    pthread_create(&thread, NULL, evaluate_subtree_threaded, parent_node->left); 
    right_result = evaluate_subtree(parent_node->right); 
    pthread_join(thread, &left_result); 
    return left_result + right_result; 
} 

注意如何代碼片段公然假定實際的評價邏輯的是evaluate_subtree而忽略所有類型。

當然,請注意線程創建比評估表達式要昂貴得多。

+0

謝謝thiton。我將使用你已經解釋過的語法樹來處理這個邏輯。非常感謝!! :) – neo3matrix 2013-02-22 06:10:30