我是一个多线程编程的新手。在这里我写了一个小程序来计算从0到20的平方根。我的thread_id数组的大小是3.我的策略就像要求thread_ID [0]计算0,3,6 ...和thread_ID的平方根[ 1]来计算1,4,7 ... 但结果似乎有一些问题。有重复的结果。pthread_join和pthread_create
#include <stdio.h>
#include <math.h>
#include <pthread.h>
#define THREAD_NUM 3
void *thread_function(void *arg)
{
int *incoming = (int*)(arg);
double result = sqrt(*incoming);
printf("The square root of %d is %f\n ",*incoming, result);
return NULL;
}
int main(void)
{
pthread_t thread_ID[THREAD_NUM];
void *exit_result;
int i;
for(i = 0; i < 20; i++)
{
int id = i%THREAD_NUM;
int num = i;
if(i >= THREAD_NUM)
{
if(pthread_join(thread_ID[id], &exit_result) != 0)
perror("join failed");
}
if(pthread_create(&thread_ID[id],NULL,thread_function,&(num)) != 0)
perror("create failed");
}
for(i = 0; i < THREAD_NUM; i++)
{
pthread_join(thread_ID[i], &exit_result);
}
return 0;
}
结果是
的2的平方根是1.414214 3的平方根是1.732051 的2的平方根是1.414214 4的平方根是2.000000 的平方根图5是2.236068 7的平方根是2.645751 8的平方根是2.828427 6的平方根是2.449490 9的平方根是3.000000 10的平方根是3.162278 12的平方根是3.464102 13的平方根是3.605551 11的平方根是3.316625 14的平方根是3.741657 15的平方根是3.872983 16的平方根是4.000000 平方18根为4.242641 17的平方根为4.123106 19的平方根为4.358899 19的平方根为4.358899
请格式化代码,并将问题添加到您期望的输出中。 – Ankit 2013-03-14 23:24:41