0

これを行う方法が頭に浮かびません。例を探してみましたが、必要なものが本当に見つかりません。

つまり、20 スレッドとしましょう。

各スレッドはループし、x ループごとに、サーバー上で changeip バッチ ファイルを開始する必要があります。

ただし、これを 1 回だけ実行し、x 個のスレッドで繰り返さないようにしたいと考えています。これをすべてのスレッドで 1 回ではなく、1 回だけ実行するにはどうすればよいでしょうか。

4

1 に答える 1

4

まず、なぜ 20 スレッドが必要だと思いますか? ほとんどの人はスレッド化をよく理解しておらず、スレッド数が多いほどソフトウェアの実行速度が速くなると考えています。そうかもしれませんが、そうではないかもしれません。特に、20 コアではない可能性が高い 1-n コアしかありません。そのため、同時にいくつのコアを持っていても、最大でしか実行できません。

ただし、実際の質問に答えるために、これはスレッド自体とはほとんど関係ありませんが、スレッドは複雑になります。

ここにはいくつかの問題があります。1 つ目は、各スレッドが独自のタイム スライスで実行され、1 つのスライスで 10 個のループを実行する 1 つのスレッドが得られ、別のスレッドは 5 回しか実行しない可能性があるということです。彼らは何度も実行しました。これは実際の問題ではないかもしれませんが、問題がある場合は、すべてのループが終了するのを待ってから次のループ セットに移動するなど、スレッドを同期する方法を見つける必要があります。

次の質問は、x ループごと (20 回としましょう) と言うとき、どのスレッドがループするかです。20を行う最初のもの?すべてが20を行ったとき?それとも、すべてのスレッドで 20 回のループを意味するのでしょうか (つまり、それぞれが 1 回実行されますか?)。

おそらく最も簡単な方法は、複数のスレッドが同時にアクセスしようとするのを防ぐために、InterlockedIncrement メソッドを介して制御する静的変数を用意することです。各スレッドは数を増やし、20 に達すると、それらのスレッドの 1 つ (その時点で増加しているスレッド) がバッチ ファイルを実行します。

于 2013-07-13T18:01:34.470 に答える