-1

ブロック解除アルゴリズムでマルチスレッドを使用しました。スレッドがない場合、30 ミリ秒実行されます。40 スレッドの場合、40 ミリ秒で実行されます。ただし、私の観察では、40ms のうち 20ms が WaitForSingleObject で使用されています。

知りたいのですが、WaitForSingleObject の回避策はありますか。

編集: 私の問題は 2 つのループで構成されています。2 番目のものは、最初のものの結果に依存します。各ループに 4 つのスレッドを使用します。各スレッドは、そのループのコンテンツの 4 分の 1 を実行します。

2 番目のループの次の 4 つのスレッドを開始する前に、最初のループの 4 つのスレッドが終了するのを待つ必要があります。

しかし、WaitForSingleObject には時間がかかりすぎると感じています。最も遅いスレッドのコストは 1 ~ 2 ミリ秒です。しかし、私の記録では、WaitFor singleObject は多少同じです。

スレッドがない場合、速度はほぼ同じか、場合によってはさらに遅くなります。したがって、私の場合、スレッド化は実際に高速化に役立ちますが、WaitForSingleObject は節約された時間をすべて使い果たし、プログラムを 1 つのスレッドと同じくらい遅くします。

4

1 に答える 1

0

EnterCriticalSection と LeaveCriticalSection は、より軽量な同期プリミティブです。可能な限り、他のロックよりもこれらを優先する必要があります。

EDIT(問題のEDITに続く):おそらくEnterCriticalSectionとして優れたパフォーマンスを持つWindows API Barrierを使用できます

于 2013-06-09T07:18:28.110 に答える