0

intの 2 次元配列の 2 つのスライスをパラメーターとして受け取る次の関数があります(ここで、coreCountは使用可能なコアの量です) 。

func calculate(slice_1 [][array_size][array_size]int, slice_2 []  [array_size[array_size]int, coreCount int) {
//for each (coreCount*k + i, i = 0, ... , coreCount) matrix from slice_1 take matrix from slice_2 and check some criteria while not changing matrix under check
}

スライスはサイズが非常に大きい (数千の 2 次元配列) ため、チェックを並行して行うことをお勧めします。だから私は単純に作成します(4コアのコンピュータの場合)

go calculate(slice_1 , slice_2, 4)
go calculate(slice_1 , slice_2, 4)
go calculate(slice_1 , slice_2, 4)
go calculate(slice_1 , slice_2, 4)

しかし、それはまだ並列ではありません。どうしたの?

4

2 に答える 2

1

いくつかのチェックを並行して行うには、ゴルーチンで入力データのさまざまな部分を調べる必要があり、非常に簡単なコード スケッチから、せいぜい同じ計算を 4 回実行するだけです。もちろん、同じ引数で 4 つのゴルーチンを実際にスポーンし、それらを区別するものは何もないと仮定します。

于 2013-09-03T00:57:06.637 に答える
1

ステートメントに forfuncは必要ありません( と書くだけです)。gogo funcName(arg1, arg2)

また、プログラム全体 (または少なくとも単純化された動作するバージョン) が必要です。GOMAXPROCS を設定しましたか?

于 2013-09-02T17:50:18.907 に答える