Приоритетное приоритетное планирование задач с бесконечным циклом

В Google и Stackru имеется много материалов, касающихся приоритетного приоритетного планирования, но у меня все еще есть путаница в отношении планирования задач с бесконечным циклом в ядре приоритетного приоритетного планирования. Давайте рассмотрим следующий случай:

ОСРВ запускает две задачи T1 а также T2 с приоритетом 50 а также 100 соответственно. Обе задачи выглядят так:

void T1()
{
    while(1)
    {
        perform_some_task1();
        usleep(100);
    }
}

а также

void T2()
{
    while(1)
    {
        perform_some_task2();
        usleep(100);
    }
}

Насколько я понял ядро ​​по расписанию T2 из-за его более высокого приоритета и приостановить T1 из-за его более низкого приоритета. Теперь, потому что T2 это бесконечный цикл, он никогда не откажется от процессора T1 пока некоторые другие высокоприоритетные задачи T2,

НО, кажется, что мое понимание неверно, потому что я проверил вышеупомянутый случай в ОСРВ и получаю вывод на консоль, напечатанный обеими задачами.

Может ли кто-нибудь прокомментировать мое понимание по данному вопросу и фактическое поведение ОСРВ в указанном выше случае?

1 ответ

Решение

В этом случае обе задачи приостанавливаются один раз. perform_some_taskN(); были выполнены (освобождение ресурсов, которые будут использоваться другими потоками). Согласно документации:

Функция usleep() приведет к приостановке выполнения вызывающего потока до тех пор, пока не истечет число микросекунд реального времени, указанное в аргументе useconds, или пока не будет доставлен сигнал вызывающему потоку, и его действие - вызвать перехват сигнала. функция или прекратить процесс. Время приостановки может быть больше, чем запрошено из-за планирования другой активности системой.

КСТАТИ, usleep() устарела (используйте nanosleep() вместо)

POSIX.1-2001 объявляет эту функцию устаревшей; вместо этого используйте nanosleep(2). POSIX.1-2008 удаляет спецификацию usleep().

Другие вопросы по тегам