продвинутая техника SPORADIC-диспетчеризации». Тем не менее более продвинутая спорадическая диспетчеризация не позволяет абсолютно точно выразить логику адаптивной.
22
Этот тест и его результаты для Linux подсказаны одним из участников (имя нам неизвестно) обсуждений на
23
Согласно стандарту POSIX установки состояния и типа завершаемости могут быть сделаны только из уже выполняющегося кода потока (при старте потока эти параметры установлены в значения по умолчанию). QNX делает расширение, позволяя установить соответствующие флаги в атрибутной записи еще до создания потока. Подробнее об этом говорилось при обсуждении создания потока.
24
Разница выражается в том, что макрос pthread_cleanup_push()
расширяется в фрагмент кода, открывающийся скобкой «{» без соответствующей скобки «}», аналогично pthread_cleanup_pop()
закрывается «}», не имея открывающей скобки. Эти вызовы могут располагаться только парами, в противном случае возникнет лексическая ошибка, обнаруживаемая компилятором.
25
Мы умышленно делаем акцент на этом месте, так как существует «красивая народная легенда» (и это утверждение встречается порой и в литературе), что потоки на периоде выполнения намного эффективнее (в смысле переключения контекста), чем процессы.
26
Здесь применена только простейшая форма «активного объекта»: гораздо сложнее, к примеру, определить деструктор такого объекта. Но именно в своем простейшем виде это многообещающая техника активных объектов.
27
Именно поэтому, наверное, стандарту POSIX так сложно органично согласовать их с нововведениями, например с парадигмой потоков.
28
Наличие круглых скобок после имени сигнала — признак того, что для этих сигналов реакция по умолчанию — принудительное завершение процесса; наличие (+) означает, что для этих сигналов предусмотрено создание дампа завершения, а наличие (-) — для этих сигналов дамп не создается. В квадратных скобках после имени сигнала указано численное значение, соответствующее данному сигналу, как оно определено в QNX.
29
Все это и делает механизм обработки более надежным по сравнению с более ранним механизмом, который описывался выше.
30
Спецификация XSI требует, чтобы процесс использовал либо поле sa_handler
, либо поле sa_sigaction
, но не оба поля одновременно (в случае «классической» структуры sigaction
, см. выше). Реализация QNX за счет объединения двух обработчиков под одним union
обеспечивает это требование автоматически, хотя определения при этом становятся несколько более громоздкими.
31
Модель очереди сигналов введена главным образом для обеспечения сигналов реального времени и будет рассмотрена ниже.
32
Инициализации, используемые в примерах вида sigaction act = { &catchint, 0, (sigset_t) 0};
, будут зависимыми от системы из-за описанных ранее различий определения struct sigaction
в разных ОС UNIX.
33
Повторить приложение У. Стивенса в QNX в чистом виде не удастся — оно аварийно завершится по