#pthreads #real-time #benchmarking
#pthreads #в режиме реального времени #сравнительный анализ
Вопрос:
Я пытаюсь реализовать бенчмарк переключения задач Rhealstone в Linux. Вот исходный код:http://pastebin.com/aYF4Tnvt
И вот что я написал до сих пор:http://pastebin.com/tX7zK7h7
Проблема в том, что циклы for выполняются произвольно несколько раз, и программа завершается. Кто-нибудь может указать мне правильное направление? Я программист-новичок, и я действительно запутался в этом материале.
Комментарии:
1. Вы должны использовать
CLOCK_MONOTONIC
, а неCLOCK_REALTIME
.2. Почему это? Какая разница?
3.
CLOCK_REALTIME
это время суток, что означает, что оно может перемещаться вперед или назад по мере настройки часов (например, с помощью NTP).CLOCK_MONOTONIC
выполняется со скоростью времени настенных часов, но никогда не скачет вперед или назад — это для измерения временных интервалов.
Ответ №1:
объединить () потоки в main(). Вы выпадаете из main и завершаете свою программу, что приводит к прекращению работы других потоков. Измените код на что-то вроде
clock_gettime(CLOCK_REALTIME, amp;start_time);
pthread_t threadID[2];
pthread_create(amp;threadID[0], NULL, task1, NULL);
pthread_create(amp;threadID[1], NULL, task2, NULL);
for (int i = 0; i < 2; i)
pthread_join(threadID[i], NULL);
clock_gettime(CLOCK_REALTIME, amp;end_time);
//... the rest
Не уверен, куда именно вы хотите поместить этот таймер завершения. Таким образом, вы также будете синхронизировать два вызова join (), но они должны быть минимальными. Если вы установите таймер перед объединением, то вы завершите свой таймер задолго до фактического завершения ваших потоков — все, что вы будете определять, это время, необходимое для завершения двух вызовов create_thread.