getaddrinfo_a线程安全吗?

我想使用getaddrinfo_a函数。 这个方法线程安全吗? 在手册页中给出的例子使用全局列表来parsing主机名。 如果我在用户空间操纵这个列表,那么它是安全的吗? 伪代码如下:

static struct gaicb **reqs =NULL; // global list of hostname to resolve. addToList() { ret = getaddrinfo_a( GAI_NOWAIT, &reqs[nreqs_base], nreqs - nreqs_base, NULL ); // enque hostname queue. } //another thread method dequeu_list( int i ) { struct gaicb * result = reqs[i] ; reqs[i] = NULL; } 

是的,请参阅源代码 :

 ... int getaddrinfo_a (int mode, struct gaicb *list[], int ent, struct sigevent *sig) { ... no acess to list ... /* Request the mutex. */ pthread_mutex_lock (&__gai_requests_mutex); /* Now we can enqueue all requests. Since we already acquired the mutex the enqueue function need not do this. */ for (cnt = 0; cnt < ent; ++cnt) if (list[cnt] != NULL) { ... 

它访问list之前获取一个互斥体。

无论如何,它与getaddrinfo类似,它需要线程安全:

freeaddrinfo()getaddrinfo()函数应该是线程安全的。