Я пытаюсь измерить, как gcc-потоки выполняются в моей системе. Я написал несколько очень простой код измерения, который является чем-то вроде этого ...Профилирование потоков C++ с часами()
start = clock();
for(int i=0; i < thread_iters; i++) {
pthread_mutex_lock(dataMutex);
data++;
pthread_mutex_unlock(dataMutex);
}
end = clock();
я делаю обычное вычитание и DIV на CLOCKS_PER_SEC, чтобы получить истекшее время около 2 секунд для 100000000 итераций. Затем я немного изменяю код профилирования, поэтому я измеряю индивидуальное время для каждого вызова mutex_lock/unlock.
for(int i=0; i < thread_iters; i++) {
start1 = clock();
pthread_mutex_lock(dataMutex);
end1 = clock();
lock_time+=(end1-start1);
data++;
start2 = clock();
pthread_mutex_unlock(dataMutex);
end2 = clock();
unlock_time+=(end2-start2)
}
Времен, которые я получаю за то же число итераций являются блокировки: ~ 27 секунд разблокировать: ~ 27 секунд
Я понимаю, почему общее время программы возрастает, больше вызовов таймера в петля. Но время для системных вызовов должно составлять менее 2 секунд. Может кто-нибудь помочь мне выяснить, где я ошибся? Благодаря!
На какой платформе вы работаете? –