Sunday, November 27, 2005

Thread-safe gethostbyname() on FreeBSD 6.0

前陣子在我個人板上有寫,FreeBSD 6.0 的 gethost*() 已經 Thread-safe 了:
  1. gethostbyname manpage on FreeBSD 6.0
  2. gethostbyname manpage on FreeBSD 5.4
在最下面 BUGS 的地方寫的還蠻清楚的,所以我就寫了個小程式測試,在不同的 Thread 裡面不斷的呼叫 gethostbyname(),看傳回來的位置是什麼:

#include <netdb.h>
#include <pthread.h>
#include <stdio.h>

#define THREAD_NUM (3)

void *thread_start()
{
const pthread_t tid = pthread_self();

int i;
for (i = 0; i < 5; i++) {
struct hostent *p = gethostbyname("ccca.nctu.edu.tw");
printf("tid = %d, gethostbyname() = %p\n", tid, p);
sleep(1);
}

return;
}

int main(void)
{
pthread_t tid[THREAD_NUM];

int i;
for (i = 0; i < THREAD_NUM; i++)
pthread_create(tid + i, NULL, thread_start, NULL);

sleep(10);
}

No comments: