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

We use cookies. Read the Privacy and Cookie Policy

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

Стандарт 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. Обе функции будут безопасными в многопоточной среде, только если вызывающий процесс выделяет в памяти место для результата и передает соответствующий указатель как аргумент функции.

Данный текст является ознакомительным фрагментом.