高性能计算实验三4 编程题:编写一个Pthreads多线程程序来实现基于monte-carlo方法的y=x^2阴影面积估算

 课本上的蒙塔卡罗讲解为:

代码:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <math.h>

#define total 10000
#define p_num 10
int in = 0;
pthread_mutex_t m=PTHREAD_MUTEX_INITIALIZER;

void* cast (void* args)
{
	int i;
	float x,y;
	int temp_in=0;
	for(i=0; i< (total/p_num); i++){
		x= (float)(rand() % 1001) * 0.001f;
		y= (float)(rand() % 1001) * 0.001f;
		if(y<x*x) temp_in++;
	}
	pthread_mutex_lock(&m);
	in += temp_in;
	pthread_mutex_unlock(&m);
}

int main(int argc, char *argv[]){
	
	pthread_t thread[p_num];
	int i;
	for (i=0;i<p_num;i++)
	{
		if(pthread_create(&thread[i], NULL, cast, NULL))
			perror("Pthread Create Fails");
	}
	for (i=0;i<p_num;i++)
	{
		if(pthread_join(thread[i], NULL))
			perror("Pthread Join Fails");
	}
	float shadow=(float) in/(float) total;
	printf("in:%d\n",in);
	printf("total:%d\n",total);
	printf("the area of the shadow is:%f\n",shadow);
	return 0;
}
	
	

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值