Допустим, мой код сделан из main (), и в main я вызываю 2 потока, которые работают параллельно.
Допустим, что для завершения main требуется 5 секунд, а для завершения каждого потока — 10 секунд.
если я синхронизирую основную программу с помощью clock_t, предполагая, что 2 потока работают параллельно, реальное время, которое займет программа, составляет 15 секунд.
Теперь, если я рассчитываю время с помощью clock_t, это даст мне время 15 секунд или 25 секунд?
Хотя поток 1 и поток 2 выполняются параллельно, будет ли clock_t () рассчитывать каждый цикл, используемый потоком 1 и потоком 2, и возвращать общее количество используемых циклов?
Я использую windows mingw32 и pthreads.
пример кода:
main(){
clock_t begin_time ;
for (unsigned int id = 0; id < 2; ++id)
{
pthread_create(&(threads[id]), NULL, thread_func, (void *) &(data[id]));
}for (unsigned int id = 0; id < 2; ++id)
{
pthread_join(threads[id], NULL);
}
time = double( clock () - begin_time )/CLOCKS_PER_SEC;
}
Функция clock
делает разные вещи в разных реализациях (в частности, в разных ОС). clock
Функция в Windows дает количество тактов с момента запуска вашей программы, независимо от количества потоков, и независимо от того, занята машина или нет [Я считаю, что это дизайнерское решение связано с древними временами, когда DOS и Windows 2.x были модные вещи в использовании, и у ОС не было способа «не запускать» что-то].
Насколько мне известно, в Linux он показывает используемое процессорное время, как и во всех Unix-подобных операционных системах.
Изменить, чтобы уточнить: Моя система Linux говорит это:
В glibc 2.17 и более ранних версиях clock () была реализована с опережением времен (2).
Для повышения точности, начиная с glibc 2.18, он реализован поверх
clock_gettime (2) (с использованием часов CLOCK_PROCESS_CPUTIME_ID).
Другими словами, время для процесса, а не для текущего потока.
Чтобы получить фактическое время процессора, используемое вашим процессом, если вы используете Windows, вы можете (и должны) использовать GetProcessTimes