Время переключения задач с эталона Rhealstone с помощью pthread_yield () - PullRequest
2 голосов
/ 23 мая 2011

Я пытаюсь реализовать задачу переключателя производительности Rhealstone в Linux.Вот оригинальный код: http://pastebin.com/aYF4Tnvt

И вот что я написал до сих пор: http://pastebin.com/tX7zK7h7

Проблема в том, что циклы for выполняются несколько раз случайным образом, аПрограмма выходит.Кто-нибудь может указать мне правильное направление?Я нубский программист, и я действительно заблудился с этим.

1 Ответ

0 голосов
/ 23 мая 2011

join () темы в main (). Вы выходите из основного и выходите из своей программы, которая убивает другие потоки. Измените код на что-то вроде

clock_gettime(CLOCK_REALTIME, &start_time);

pthread_t threadID[2];

pthread_create(&threadID[0], NULL, task1, NULL);

pthread_create(&threadID[1], NULL, task2, NULL);  

for (int i = 0; i < 2; ++i)
    pthread_join(threadID[i], NULL);

clock_gettime(CLOCK_REALTIME, &end_time);

//... the rest

Не уверен, где именно вы хотите поместить таймер окончания. Таким образом, вы также синхронизируете два вызова join (), но они должны быть минимальными. Если вы установите таймер перед соединением, то вы закончите свой таймер до того, как ваши потоки фактически закончатся - все, что вам нужно, - это время, сколько потребуется для завершения двух вызовов create_thread.

...