Небольшой комент В качестве примера можно привести использование счетного семафора в качестве счетчика цикла. Он, конечно, может применяться в этих целях, принципами ОСРВ это не возбраняется, но здравый смысл должен говорить за неэффективность такого подхода. Сравните два приведенных ниже фрагмента кода:
OS_Csem_SetValue(csem, 10);
do {
/*...*/
OS_Csem_Accept(csem);
} while (OS_Csem_Check(scem));
i = 10;
do {
/*...*/
} while (--i);
Здесь очевидно злоупотребление сервисами ОС. Возможно, этот пример кажется утрированным, тем не менее, это фрагмент реальной программы.
Далеко не всегда.
Например, внутри цикла выполняется что-то длительное,
и нам надо регулярно отдавать управление ядру,
чтобы не пропустить важное событие,
которое может ожидать более приоритетная задача.
Для того и вызывается сервис ОС.
Код ОС не смотрел, наверное там есть что-то типа yield (),
и лучше использовать его внутри цикла №2, но и первый вариант законен.