c - 如何使用多个 pthreads 来评估程序中的表达式

标签 c linux pthreads

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

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

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

那怎么办呢??

最佳答案

当你解析表达式时,你会得到一个像下面这样的抽象语法树:

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

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

关于c - 如何使用多个 pthreads 来评估程序中的表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14999951/

相关文章:

linux - 从文件加载 linux screen 设置

c - 多线程 C 程序无法使用参数运行

c - 如何创建仅在链接 pthread 时才使用互斥体的库?

linux - Bash-创建一个数组并递增每个索引-然后是最大的索引

c++ - 为什么这段代码会导致死锁?

c - Uart 检查接收缓冲区中断与轮询

c - 在c中映射多个匿名页面

c - 能够编译 FFmpeg 的 Windows 兼容 C IDE?

c - 为什么控件放在 "else"部分?

c - 错误 : multiple definition