3

私はかなり新しいですJava Threadsが、並列化に関しては通常Cを使用します。次のパターンと同じパターンを持つアルゴリズムを並列化するには、次のようにします。

void traverse(node* p)
{
    if (p->left)
        #pragma omp task // p is firstprivate by default
        traverse(p->left);
    if (p->right)
        #pragma omp task // p is firstprivate by default
        traverse(p->right);
}

openMPたとえば、のタスクディレクティブを使用します。

タスクの説明

スレッドがタスク構成に遭遇すると、関連する構造化ブロックのコードからタスクが生成されます。遭遇したスレッドは、タスクをすぐに実行するか、実行を延期する可能性があります。後者の場合、チーム内の任意のスレッドにタスクを割り当てることができます。タスクの完了は、タスク同期構造を使用して保証できます。タスク構成は外部タスク内にネストできますが、内部タスクのタスク領域は外部タスクのタスク領域の一部ではありません。

私の質問は:

これと同じアイデア(タスク)をどのように実装できJava Threadsますか?

4

1 に答える 1

1

OpenMPのプラグマは、並列化を少し簡単にします。

Javaでは、最初にRunnableを実装するクラスを作成する必要があります。
-例:publicClassTraverseはRunnableを実装します

次に、クラスを作成し、「run」を呼び出してスレッドを開始する必要があります。

private void traverse(node p) 
{
   Traverse t = null;

    if (p.left)
       t = new Traverse(p.left);
    if (p->right)
       t = new Traverse(p.right)

    t.run();   // start thread. this call will not wait for run to finishes
}
于 2012-11-12T23:40:01.307 に答える