我正在用C編寫一個程序來計算某些網站的訪問時間。 sitenames存儲在urls數組的每個元素中。如果我取出for(y = 0; y <迭代; y ++)循環,那麼一切運行良好。但如果我保留它。第一個網站urls [0]在第二個for循環完全結束並遞增後變得混亂yfor循環中的線程
這是什麼原因造成的?
char *urls[50]; char str1[20];
void *wget(void *argument)
{
int threadid;
threadid = *((int *)argument);
strcpy(str1, "wget -q --spider ");
strcat(str1, urls[threadid]);
system(str1);
}
for (y = 0; y < iterations; y++)
{
for (j = 0; j < numthreads; j++)
{
thread_args[j] = j;
clock_gettime(CLOCK_REALTIME, &bgn);
rc = pthread_create(&threads[j], NULL, wget, (void *) &thread_args[j]);
rc = pthread_join(threads[j], NULL);
clock_gettime(CLOCK_REALTIME, &nd);
times[j] = timediff(bgn,nd);
}
}
你爲什麼要創建一個線程,然後馬上加入呢?這是浪費,可能會減慢你的時間。 – WirthLuce 2011-05-20 01:44:41
不只是浪費,它使線程完全沒有意義。你可以用'wget(&thread_args [j]);' – 2011-05-20 02:24:00
來代替'pthread_create'和'pthread_join';從吞吐量的角度來看,在一個循環中執行創建以及在一個循環中執行連接會更有意義第二個循環。然後再次,你不需要線程來並行產生一堆子進程 - 在一個循環中''fork()'/'exec()'然後'wait()'讓它們退出。 – bk1e 2011-05-20 03:24:28