1

私のコードは次のとおりです。

int main()
{
  thread t[10];
  for (int i = 0;i < 10; i++)
    t[i] = thread(print,i);//thread creation
  for (int i = 0;i < 10; i++)
    t[i].join();//waiting maiin to threads to cpmleate execution
  cout << "in main";
}

void print(int i) {
  cout<<"i:"<<endl;
}

これが最も効率的な方法ですか、それとも実行時間を短縮するためのより効率的な方法はありますか?

4

2 に答える 2

5

スレッドでもっと複雑な仕事をしたいと思っていると思います。マルチスレッド化によって得られる高速化の程度は問題によって異なり、すべての種類の問題を並列化できるわけではありません。本当に深く掘り下げたい場合は、このトピックに関する本がいくつかあります。マルチスレッド プログラミングは簡単なことではなく、気を付けなければならない注意点がたくさんあります。いくつかの基本的な経験則:

  • 使用しているプロセッサ コアの数と同じ数のスレッドを使用します。それ以上持っていても何のメリットもありません。
  • スレッド間で共有されるデータの量を最小限に抑えます。最適には、各スレッドが独立したデータで動作する必要があるため、同期のオーバーヘッドはありません。通常は不可能ですが、できるだけ少ない同期を使用する必要があります。
  • 同期を使用する場合は、mutex がロックされている時間を最小限に抑えます。
  • デッドロックを回避するには、ロックするミューテックスの特定の順序を常に確保してください。たとえば、A をロックした後にミューテックス B をロックすると、B の後に A をロックする場所がなくなります。

他にもたくさんありますが、これらはすぐに頭に浮かんだものです。

于 2013-07-26T07:24:20.447 に答える