Inet_aton в Perl безопасен для потоков? - PullRequest
5 голосов
/ 23 февраля 2010

Является ли inet_aton Thread-Safe? Согласно UNP, я знаю, что POSIX не требует, чтобы большая часть Sockets API была поточно-ориентированной, и поэтому я должен предположить, что это не так, но в целом, как мне узнать, является ли что-то поточно-ориентированным в Perl? В какой степени мне нужно заблокировать библиотечную функцию, которую я вызываю? И как мне их заблокировать? Когда я пытаюсь что-то вроде lock(&inet_aton), выдает ошибку: Can't modify non-lvalue subroutine call in lock.

И да, я прочитал: Потоковая безопасность системных библиотек

Ответы [ 2 ]

2 голосов
/ 23 февраля 2010

Функция inet_aton не имеет никакого состояния, которое она поддерживает между вызовами функций, поэтому я не вижу причин, по которым она не была бы поточно-безопасной (при условии, что передаваемые вами аргументы не разделяются между потоками) .

2 голосов
/ 23 февраля 2010

Если вы внимательно прочитаете man-страницу inet_aton , вы увидите, что этот вызов не использует никакого общего состояния (в отличие от функции inet_ntoa, описанной на той же man-странице), и, следовательно, должно быть потоком сейф.

То, что функция записывает свой результат в структуру, предоставленную вызывающей стороной, также поддерживает это.

Perl использует тонкую оболочку поверх этих функций и, таким образом, не меняет потоковую безопасность базовой библиотеки.

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