⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pai1.c

📁 采用Pthread+C++方式进行多线程求Pai
💻 C
字号:
#include<stdio.h>#include<stdlib.h>#include<pthread.h>#include<math.h>#include<time.h>int N=10000000;int M=0;double pai=0;double THREAD_NUMBER=2;static pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;// quick lockvoid* calculatePai(void *arg){ int i; int thread_id=*(int*)arg; double tmp; for(i=thread_id;i<N;i+=THREAD_NUMBER){  tmp=4.0/(1+((i+0.5)/N*(i+0.5)/N));    pthread_mutex_lock(&mutex);   pai+=tmp;  pthread_mutex_unlock(&mutex); }}void* MonteKarlo(void *arg ){      int i;  int thread_id=*(int*)arg;  for(i=thread_id;i<N;i+=THREAD_NUMBER)  {  double x=(double)((rand()%11));  double y=(double)((rand()%11));  double dis=x*x+y*y;  if(dis<=100){  pthread_mutex_lock(&mutex);    M++;  pthread_mutex_unlock(&mutex);  } }}int main(int argc,char* argv[]){  int m,n;    if(argc<3){    printf("Number of arguments must be greate than 2!\n");    exit(1);   }   m=atoi(argv[1]);   n=atoi(argv[2]);   if(m<0||n<0){    printf("arguments must be >0!\n");    exit(1);   }  THREAD_NUMBER=m;  N=n;    //printf("argc=%d m=%d n=%d\n",argc,m,n);    pthread_t pt[50];  int i;  int arg[50];  time_t begin_time,end_time;  clock_t start,finish;  begin_time=time(NULL);  start=clock(); for(i=0;i<THREAD_NUMBER;i++){   arg[i]=i; /* if(pthread_create(&pt[i],NULL,MonteKarlo,(void*)&arg[i])){    printf("pthread_create error\n");      exit(1);   }*/   if(pthread_create(&pt[i],NULL,calculatePai,(void*)&arg[i])){    printf("pthread_create error\n");      exit(1);   }    }  for(i=0;i<THREAD_NUMBER;i++){  if(pthread_join(pt[i],NULL)){    printf("pthread_join error\n");     exit(1);  } } pai/=N; //printf("pai=%lf\n",pai); finish=clock(); end_time=time(NULL);  //printf("Pai=%.5lf, time consumed:%lf\n",1.0*M/N*4,difftime(end_time,begin_time));   //printf("Pai=%.5lf, time consumed:%lf\n",pai,difftime(end_time,begin_time));   printf("Pai=%.5lf, time consumed:%lf\n",pai,(double)(finish-start)/CLOCKS_PER_SEC);   pthread_mutex_destroy(&mutex);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -