fk0, легенда (10.12.2013 14:40 - 14:42, просмотров: 259) ответил Скрипач на Вы рассписываете некий ПРИНЦИП. Покажите его на простом примере. Не почтите за труд, уважьте старика.
Какой-либо поток ожидает, например события (поступление данных в fifo, семафора, да не важно чего). Есть очередь связанная с событием (внутри ОС). И при вызове функции ожидания ОС помещает поток в эту очередь. Дальше ОС никак не затрагивает поток (его код не выполняется вообще). При возникновении события ОС запускает первый поток из связанной с событием очереди, исключая его оттуда. Плюсы: исключается постоянная проверка условий (есть событие или нет, например проверка флага). Минусы: функция ожидания и функция сигнализации о событии выполняются медленно, т.к. происходит много действий (вставка в очередь, исключение из очереди), кроме того под очередь нужна память -- уже не один бит на флаг, а несколько байт на элемент синхронизации и несколько байт на каждую ожидающую задачу. В очень маленьких системах выгоднее опрашивать флаги в цикле (проверяются быстро, памяти нужно мало), возможно перейдя к time triggered архитектуре для экономии энергии. В больших системах проверка флагов в цикле начинает занимать слишком много процессорного времени и применение ОС более выгодно, несмотря на большие накладные расходы (для поездок в соседний город лучше автомобиль, для поездок на соседний континент -- самолёт).
[ZX]