-2

我是线程和并行的新手。我有这种方法用于 C# 中的游戏,需要使用并行迭代。如何在以下方法的 for 循环中使用它?

public int[,] GetLegalMoves()
{
    int[,] legalMoves = new int[8, 8];

    for (int i = 0; i < 8; i++)
        for (int j = 0; j < 8; j++)
            if (IsMoveLegal(i, j)) legalMoves[i, j] = 1;
            else legalMoves[i, j] = 0;

    return legalMoves;
}
4

1 回答 1

2

这可以通过并行化你的外循环来并行化:

public int[,] GetLegalMoves()
{
    int[,] legalMoves = new int[8, 8];

    Parallel.For(0, 8, i =>
    {
        for (int j = 0; j < 8; j++)
            if (IsMoveLegal(i, j)) legalMoves[i, j] = 1;
            else legalMoves[i, j] = 0;
    });

    return legalMoves;
}

话虽如此,这可能会导致运行速度变慢,因为 8x8 矩阵是如此之小,以至于调度并行工作的开销可能高于所获得的收益,除非IsMoveLegal是相当昂贵的操作。

这也将要求IsMoveLegal可以安全地从多个线程中使用。

于 2012-12-06T22:25:28.267 回答