0

QueryPerformanceCounter にアクセスしてルーチンの実行時間を記録するコードがあります。だいたい:

var
    FStart, FStop : Int64 ;
...
QueryPerformanceCounter (FStart) ; 
... <code to be measured>
QueryPerformanceCounter (FStop) ; 

<calculate FStop - FStart, update minimum and maximum execution times, etc>

このロギング コードの一部はスレッド内にありますが、一方で、派生した結果にアクセスする表示 UI があります。ロギング コードもアクセスしているのと同じ変数に VCL スレッドがアクセスしている可能性があると考えています。VCL はデータを読み取るだけですが (マングルされた読み取りはそれほど深刻ではありません)、ログ コードはデータの読み取りと書き込みを、場合によっては別のスレッドから行います。

QueryPerformanceCounter 自体はスレッドセーフだと思います。

コードは問題なく問題なく実行されていますが、クリティカル セクションで Int64 カウンターへのアクセスをラップする必要があるかどうか疑問に思っています。

また、クリティカル セクション アクセスの速度ペナルティはどのくらいなのだろうか?

4

1 に答える 1

1

読み取りと書き込みの両方が関係している場合、マルチバイトの非アトミック データにスレッド間でアクセスするときはいつでも、アクセスをシリアル化する必要があります。クリティカル セクション、ミューテックス、セマフォ、SRW ロックなどを使用するかどうかはあなた次第です。

于 2011-12-09T04:58:58.757 に答える