0

我想使用 pthread 通过将表达式分解为线程来解决它。

我的问题是:- 如果要使用 pthreads 评估像 (a+b)+(c+d)+(e+f) 这样的表达式:-

  1. 创建 3 个线程,其中第一个表达式 (a+b) 由第一个线程求值,(c+d) 由第二个线程求值,(e+f) 由第三个线程求值。
  2. 上述所有变量的值都是'1',因此,表达式评估的最终答案应该是'6'。
  3. 最后应该执行第三个线程,它将最终输出打印为“6”。

那怎么办呢??

4

1 回答 1

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其中并忽略所有类型。

当然,请注意创建线程比评估表达式要昂贵得多。

于 2013-02-21T10:35:17.563 回答