式を解析すると、次のような抽象構文ツリーが得られます。
+
/ \
+ +
/ \ / \
+ + e f
/ \ |\
a b c d
構文木のノードで問題をスレッドに分割できます。ノードを評価するとき、2つの異なるサブ問題(左と右のサブツリー)を2つの異なるスレッドに与えることができます。各サブスレッドは、ツリーを十分に並列化するまでパターンを繰り返すことができます。コードでは、これは次のようになります。
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すべてのタイプを無視していることに注意してください。
もちろん、スレッドの作成は式を評価するよりもはるかにコストがかかることに注意してください。