2010-02-23 74 views
5

inet_aton线程安全吗?我知道根据UNP,POSIX不需要很多Sockets API是线程安全的,所以我必须假设它们不是,但总的来说,我怎么知道Perl中的某些线程是否安全?我需要在多大程度上锁定我所调用的库函数?我如何锁定它们?当我尝试类似lock(&inet_aton)时,它给了我一个错误:Can't modify non-lvalue subroutine call in lockPerl的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',我怎么能锁定它? – 2010-02-24 06:11:51

2

函数inet_aton没有它在函数调用之间保留的任何状态,所以我没有看到任何它不会是线程安全的原因(假设您传递的参数不在线程之间共享)。

+1

使用全局静态变量或全局外部状态(例如硬件时钟),即使没有有状态,我认为这是一个潜在的问题。 – mctylr 2010-02-23 21:31:20