我想使用 pthread 通过将表达式分解为线程来求解表达式。
我的问题是:- 如果要使用 pthreads 计算像 (a+b)+(c+d)+(e+f) 这样的表达式,则:-
- 创建 3 个线程,其中第一个表达式 (a+b) 由第一个线程计算,(c+d) 由第二个线程计算,(e+f) 由第三个线程计算。
- 以上所有变量的值都是'1',所以,表达式求值的最终答案应该是'6'。
- 最后应该执行第三个线程,它将最终输出打印为“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/