Нужно ли оборачивать доступ к Int64 критическим разделом? - PullRequest
0 голосов
/ 09 декабря 2011

У меня есть код, который регистрирует время выполнения подпрограмм путем доступа к QueryPerformanceCounter. Грубо говоря:

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

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

Часть этого кода регистрации находится внутри потоков, но, с другой стороны, есть интерфейс отображения, который обращается к полученным результатам. Я полагаю, что существует вероятность того, что поток VCL получит доступ к тем же переменным, что и код регистрации. VCL будет только когда-либо читать данные (и искаженное чтение не будет слишком серьезным), но код регистрации будет читать и записывать данные, иногда из другого потока.

Я предполагаю, что сам QueryPerformanceCounter является поточно-ориентированным.

Код успешно работает без каких-либо признаков проблемы, но мне интересно, нужно ли мне обернуть свои обращения к счетчикам Int64 в критической секции?

Мне также интересно, какова потеря скорости доступа к критическому разделу?

1 Ответ

1 голос
/ 09 декабря 2011

Каждый раз, когда вы получаете доступ к многобайтовым неатомарным данным в потоке, когда выполняются операции чтения и записи, вам необходимо сериализовать доступ.Независимо от того, используете ли вы критическую секцию, мьютекс, семафор, блокировку SRW и т. Д., Зависит только от вас.

...