私はマルチスレッドプログラミングの新人です。ここで、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