Я измеряю время на стене с помощью функции clock_gettime (), найденной в. Он прекрасно работает, когда я использую его в main (), но не так, как я пытаюсь его использовать.
Я знакомлюсь с планировщиком linux и измеряю производительность в разных частях. Я хочу, чтобы можно было измерить Время ожидания , которое определяется как "общее время, которое поток проводит в очереди готовности" (сколько времени до начала выполнения функции).
Достаточно легко Я могу измерить это, установив clock_gettime () перед функцией потока и другой прямо внутри функции. Однако проблема, с которой я сталкиваюсь, заключается в том, что время внутри функции потока меньше, чем у внешней, что дает нам отрицательное время.
Я запускаю это на своем windows p c через ubuntu.
в чем может быть проблема?
код:
clock_gettime(CLOCK_REALTIME,&data.before);
thread_array[i-1] = data;
if(pthread_create(&tids[i],&attr,workLoad,(void*) &data) != 0){
perror("Could not create thread");
return 1;
}
}
for(int i = 1;i < threadAmount; i++){
if(pthread_join(tids[i],NULL)!= 0){
perror("Thread could not wait");
return 1;
}
}
и вот мой поток c:
void *workLoad(void *args)
{
threadData* data = (threadData*) args;
clock_gettime(CLOCK_REALTIME,&data->after);
int loopAmount = data->loopAmount;
int counter = 0;
for(int i = 0; i < loopAmount; i++){
counter++;
}
return NULL;
}
результат интервала времени
![enter image description here](https://i.stack.imgur.com/8OE2B.png)