我是多线程编程的菜鸟。这里我写了一个小程序来计算 0 到 20 的平方根。我的 thread_id 数组的大小是 3。我的策略就像要求 thread_ID[0] 计算 0,3,6 的平方根......和 thread_ID[ 1]计算1,4,7...但是结果似乎有些问题。有重复的结果。
#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