2010-02-23 6 views
5

inet_aton 스레드 안전합니까? 나는 UNP에 따르면 POSIX가 많은 스레드 API를 쓰레드에 안전하게 할 것을 요구하지 않는다는 것을 안다. 그래서 나는 그렇지 않다고 가정해야한다. 그러나 일반적으로 뭔가가 Perl에서 쓰레드가 안전한지 어떻게 알 수 있는가? 내가 호출하는 라이브러리 기능을 어느 정도까지 잠글 필요가 있습니까? 어떻게 그들을 잠글까요? lock(&inet_aton)과 같은 것을 시도하면 오류가 발생합니다 : Can't modify non-lvalue subroutine call in lock.Perl의 inet_aton은 스레드로부터 안전합니까?

그리고 그래, 내가 읽은 : Thread-Safety of System Libraries

답변

2

당신은 inet_aton manpage주의 깊게이 호출 (같은 맨 페이지에 설명 된 inet_ntoa 기능에 반하는) 모든 공유 상태를 사용하지 않는 것을 볼, 따라서 것이다 읽는다면 스레드로부터 안전해야합니다.

함수가 호출자가 제공 한 구조에 결과를 기록하는 기능도이 기능을 지원합니다.

Perl은 a thin wrapper on top of those functions을 사용하므로 기본 라이브러리의 스레드 안전성이 변경되지 않습니다.

+0

일반적으로 라이브러리 호출과 관련하여 스레드 안전성을 어떻게 평가합니까? 필자는 POSIX에서 재진입성에 대해 읽었습니다. http://www.unix.org/whitepapers/reentrant.html 정적 데이터/상태를 찾는 것이 주요한 것 같습니다. 나는 func 단위로 func를 검사 할 필요가 있다고 생각한다. 예를 들어 inet_ntoa를 호출해야한다면 어떻게 잠글 수 있습니까? –

2

함수 inet_aton에는 함수 호출간에 유지되는 상태가 없으므로 전달하는 인수가 스레드간에 공유되지 않는다면 스레드 안전성이 보장되지 않는 이유는 없습니다.

+1

전역 정적 변수 또는 전역 외부 상태 (예 : 하드웨어 시계)의 사용은 상태 유지 없이도 잠재적 인 문제라고 생각합니다. – mctylr

관련 문제