Boost スレッドを使用して計算を高速化するコードがありますが、デバッグする必要があり、並列ではなく直列に実行したいと考えています。それ、どうやったら出来るの?
5 に答える
すべてのスレッドにブレークポイントを設定します。デバッガーには、1つのスレッドだけをステップスルーまたは開始するコマンドが必要です。残りのスレッドは中断されたままになるため、シングルスレッドのデバッグに干渉することはありません。1つのスレッドが終了したら、すべてのスレッドを再開するか、次のスレッドでデバッグを続行できます。
「計算を高速化する」ことを意図していると仮定すると、連続して実行されるスレッドはパフォーマンスにまったく役立ちません。実際には、作業を並列化していないため、スレッドのオーバーヘッドのためにパフォーマンスが低下します。
それらを連続して実行する傾向がある場合は、それぞれが現在のスレッドの実行が終了するのを待ってから、別のスレッドを実行できるようにしてください。私はおそらくここで何かを逃しています。
何かが欠けていない限り、単一のスレッドを使用してデバッグしてください。アルゴリズムを正しく理解しない限り、マルチスレッドのことは忘れてください。
スレッドごとにセマフォを作成し、メイン スレッドで最初のセマフォにシグナルを送ることができ、各スレッドは最後に次のセマフォにシグナルを送ることができます。
それでも、なぜこのようにアプリをデバッグする必要があるのでしょうか? すべてのスレッドを実行してアプリをデバッグすると、競合状態が発生するかどうかなどを確認できるため、非常に便利です。
プロセスには単一のプロセッサ コアのみを割り当てます。Windowsでは、これを行うことができますSetProcessAffinityMask