Шрифт:
В качестве альтернативы некоторые реализации с поддержкой программных потоков (Digital Unix 4.0 и HP_UX 10.30) предоставляют версии этих функций, допускающие повторное вхождение за счет использования собственных данных программных потоков.
Функции
Исторически функция
Функция
Функция
Похожая проблема возникает с переменной
поместить аргумент системного вызова (целочисленный дескриптор) в регистр;
поместить значение в другой регистр, указывая, что был сделан системный вызов функции
активизировать системный вызов (переключиться на ядро со специальной инструкцией);
проверить значение регистра, чтобы увидеть, что произошла ошибка;
если ошибки нет, возвратить (0);
сохранить значение какого-то другого регистра в переменной
возвратить (-1).
Прежде всего заметим, что если ошибки не происходит, значение переменной
Будем считать, что программа проверяет возвращаемое значение функции
Существует небольшой промежуток времени между сохранением кода ошибки в переменной errno в тот момент, когда системный вызов возвращает управление, и выводом этого значения программой. В течение этого промежутка другой программный поток внутри процесса (то есть обработчик сигналов) может изменить значение переменной
При рассмотрении этих двух проблем в связи с обработчиками сигналов одним из решений проблемы с функцией
В этом коде мы также вызываем функцию