Функции, безопасные в многопоточной среде

Функции, безопасные в многопоточной среде

Стандарт POSIX.1 требует, чтобы все определенные в нем функции, а также функции, определенные в стандарте ANSI С, были безопасными в многопоточной среде. Исключения из этого правила приведены в табл. 26.1.

К сожалению, в POSIX.1 ничего не сказано о безопасности в многопоточной среде по отношению к функциям сетевого API. Последние пять строк в этой таблице появились благодаря Unix 98. В разделе 11.18 мы говорили о том, что функции gethostbyname и gethostbyaddr не допускают повторного вхождения. Как уже отмечалось, некоторые производители определяют версии этих функций, обладающие свойством безопасности в многопоточной среде (их названия заканчиваются на _r), но поскольку они не стандартизованы, лучше от них отказаться. Все функции getXXX, не допускающие повторного вхождения, были приведены в табл. 11.5.

Таблица 26.1. Функции, безопасные в многопоточной среде

Могут не быть безопасными в многопоточной среде Должны быть безопасными в многопоточной среде Комментарии
Asctime asctime_r Безопасна в многопоточной среде только в случае непустого аргумента
ctermid
Ctime ctime_r
getc_unlocked
getchar_unlocked
Getgrid getgrid_r
Getgrnam getgrnam_r
Getlogin getlogin_r
Getpwnam getpwnam_r
Getpwuid getpwuid_r
Gmtime gmtime_r
Localtime localtime_r
putc_unlocked
putchar_unlocked
Rand rand_r
Readdir readdir_r
Strtock strtock_r
tmpnam Безопасна в многопоточной среде только в случае непустого аргумента
Ttyname ttyname_r
GethostXXX
GetnetXXX
GetprotoXXX
GetservXXX
inet_ntoa

Приведенная таблица позволяет заключить, что общим способом сделать функцию допускающей повторное вхождение является определение новой функции с названием, оканчивающимся на _r. Обе функции будут безопасными в многопоточной среде, только если вызывающий процесс выделяет в памяти место для результата и передает соответствующий указатель как аргумент функции.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Глава 15. Обитание в среде KDE

Из книги Linux для пользователя автора Костромин Виктор Алексеевич

Глава 15. Обитание в среде KDE В этой главе я хочу вкратце показать, как создать на компьютере, работающем под управлением ОС Linux, удобную для пользователя рабочую среду. До такой степени удобную, чтобы вообще можно было отказаться от использования Windows и Windows-продуктов. К


П17. К главе 15 "Обитание в среде KDE"

Из книги Введение в OpenGL автора Компьютеры Автор неизвестен -

П17. К главе 15 "Обитание в среде KDE" 1.  На русской версии сайта KDE Вы найдете документацию по KDE на русском языке. Там есть руководство по компиляции, русификации и ссылки. Там же ищите список зеркал, откуда можно скачать исходники. (http://www.kde.org/international/russia/index.html) 2. Сайт http://www.kde.ru/


Создание приложения в среде MS Visual C++ 5.0

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Создание приложения в среде MS Visual C++ 5.0 Перед началом работы необходимо скопировать файлы glut.h, glut32.lib glut32.dll в каталоги…MSVCIncludeGl,…MSVCLib,…WindowsSystem соответственно. Также в этих каталогах надо проверить наличие файлов gl.h, glu.h, opengl32.lib, glu32.lib, opengl32.dll, glu32.dll, которые обычно входят в


Создание приложения в среде Borland C++ 5.02

Из книги Macromedia Flash Professional 8. Графика и анимация автора Дронов В. А.

Создание приложения в среде Borland C++ 5.02 Как и для Visual C++, сначала надо обеспечить наличие файлов glut.h, glut32.lib, glut32.dll в каталогах…BorlandCIncludeGl,…BorlandCLib,…WindowsSystem соответственно. Также в этих каталогах надо проверить наличие файлов gl.h, glu.h, opengl32.lib, glu32.lib, opengl32.dll, glu32.dll, которые обычно


Процессы в многопроцессорной среде

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Процессы в многопроцессорной среде В программе 6.1 процессы и их основные (и только эти) потоки выполняются практически полностью независимо друг от друга. Единственная зависимость между ними проявляется лишь в конце выполнения родительского процесса, поскольку он


Библиотеки с многопоточной поддержкой

Из книги Атака на Internet автора Медведовский Илья Давыдович

Библиотеки с многопоточной поддержкой При проектировании пользовательских библиотек следует уделять самое пристальное внимание тому, чтобы избежать возникновения проблем, связанных с параллельным выполнением нескольких потоков, особенно в тех случаях, когда речь


Решение проблемы долговременных состояний в многопоточной среде

Из книги Операционная система UNIX автора Робачевский Андрей М.

Решение проблемы долговременных состояний в многопоточной среде В искомом решении сочетаются несколько компонентов:• Библиотека DLL, в которой содержатся функции, обеспечивающие отправку и прием сообщений.• Функция, представляющая точку входа в DLL.• Локальная


Комментарии по поводу DLL и безопасной многопоточной среды

Из книги Анонимность и безопасность в Интернете. От «чайника» к пользователю автора Колисниченко Денис Николаевич

Комментарии по поводу DLL и безопасной многопоточной среды • Всякий раз, когда создается новый поток, вызывается функция DllMain с опцией DLL_THREAD_ATTACH, но для основного потока отдельного вызова с опцией DLL_THREAD_ATTACH не существует. В случае основного потока должна использоваться


ГЛАВА 16 Программирование в среде Win64

Из книги UNIX — универсальная среда программирования автора Пайк Роб

ГЛАВА 16 Программирование в среде Win64 Наиболее заметный прогресс в развитии возможностей Windows после появления Windows NT и Windows 95 связан с приходом 64-разрядного программирования и расширением Win32 до Win64. На объединенный API обычно ссылаются просто как на Windows API, и именно такой


Работа с документами в среде Flash

Из книги автора

Работа с документами в среде Flash Теперь давайте поговорим о том, как во Flash выполняется работа с документами, а потом плавно перейдем к рассмотрению окна документа и основных принципов создания


Серверы Firebird в среде DTP

Из книги автора

Серверы Firebird в среде DTP Детальное обсуждение среды распределенной обработки транзакций (Distributed Transaction Processing, DTP) не является целью данной книги. Достаточно сказать, что Суперсервер или Классический сервер Firebird хорошо подходят к различным сценариям DTP.Open Group, определившая


ГЛАВА 33. Безопасность в операционной среде.

Из книги автора

ГЛАВА 33. Безопасность в операционной среде. В Firebird не существует средств для шифрования и дешифрования данных (кроме паролей пользователей), которые передаются через клиентский интерфейс. Существуют некоторые ограничения в использовании инструментов Firebird, которые


Глава 7 Безопасные распределенные вычислительные системы

Из книги автора

Глава 7 Безопасные распределенные вычислительные системы План, что и говорить, был превосходный: простой и ясный, лучше не придумаешь. Недостаток у него был только один: было совершенно неизвестно, как привести его в исполнение. Л. Кэрролл. Алиса в стране чудес Описанные


Доступ к среде передачи

Из книги автора

Доступ к среде передачи Общим в наиболее распространенных технологиях локальных сетей является то, что несколько сетевых устройств совместно используют одну и ту же среду передачи данных, и соответственно делят между собой полосу пропускания сети. Для корректного и


5.1.1. Способ 1: безопасные соединения

Из книги автора

5.1.1. Способ 1: безопасные соединения Самый простой способ защиты электронной почты заключается в использовании безопасных соединений. Наверняка вы знаете, что существует HTTPS – безопасная версия протокола HTTP. Данные, передаваемые по протоколу HTTPS, шифруются с помощью