2013-02-21 23 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