[an error occurred while processing this directive]
|
текущее состояние всех задач - это по одной ячейке памяти на задачу. Они доступны всем задачам - и это нормально, когда одна задача смотрит, что другая находится в таком-то состоянии, а третья - в третьем, и базируясь на этой информации ничего не делая незамедлительно выходит, ожидая освобождения ресурса процессора для своей низкоприоритетной деятельности.
Семафоры я естественно делаю, но суть в том, что с ними работать проще, так как исключен конфликт одновременного доступа к семафору из двух задач, так как задача не может быть прервана кем-то "свыше" ради переключения на другую, пока она сама не доработает свою часть труда. Итого все семафоры с их обычной для ОС защитой от переключения задач всередине работы с семафором вырождаются в обычные ячейки памяти без какой либо защиты.
А "незамедлительно прервать" - легко. Как только какая-то задача решает, что наступило такое событие, она помещает в очередь входных данных для той самой сверхприоритетной задачи какую-то информацию, и выходит в основной цикл. А в основном цикле стоит - что пока что-то в очереди есть, должны исполняться только "сверхприоритетные" задачи, а остальные - отдыхать.
P.S. Я нигде не говорил, что семафоров нет. Я говорил, что они проще реализуются, просто шмоток "shared memory".