0

pthreadを使用して、式をスレッドに分割して式を解決したいと思います。

私の質問は次のとおりです。-(a + b)+(c + d)+(e + f)のような式が、次のようなpthreadを使用して評価される場合:-

  1. 最初の式(a + b)が1番目のスレッドによって評価され、(c + d)が2番目のスレッドによって評価され、(e + f)が3番目のスレッドによって評価される3つのスレッドを作成します。
  2. 上記のすべての変数の値は「1」であるため、式の評価の最終的な答えは「6」になるはずです。
  3. 最後に3番目のスレッドを実行する必要があります。これにより、最終出力が「6」として出力されます。

それでは、これをどのように行うのですか?

4

1 に答える 1

1

式を解析すると、次のような抽象構文ツリーが得られます。

                  +
                 / \
                +   +
               / \ / \
              +  + 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すべてのタイプを無視していることに注意してください。

もちろん、スレッドの作成は式を評価するよりもはるかにコストがかかることに注意してください。

于 2013-02-21T10:35:17.563 に答える