斌酱--归档多线程求pi(级数法)

多线程求pi(级数法)

posix标准

级数求pi

//
//  pi.c
//  pi
//
//  Created by Yibin on 2021/3/28.
//  Copyright © 2021 Yibin. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

pthread_mutex_t mut;
double pi = 0.0;
long long series_num;  // 确定所求的级数及所需要的线程数
int thread_num; // 确定所求的级数及所需要的线程数

void *Series_Function(void *arg){
    int id = *(int *)arg;  // 传参强制类型转换并且解引用
    int piece = series_num/thread_num; // 确定间隔
    int start = id * piece;
    int end = start + piece;
    double local_pi = 0.0;
    double factor;
    if(start % 2 == 0)
        factor = 1.0;
    else
        factor = -1.0;
    for(int i = start;i<end;i++,factor=-factor){
        local_pi += factor/(2*i+1);
    }
    pthread_mutex_lock(&mut);
    pi += 4.0 * local_pi;
    pthread_mutex_unlock(&mut);
}
int main(int argc,const char** argv){
    series_num = atoi(argv[1]);
    thread_num = atoi(argv[2]);
    pthread_t thread[thread_num];
    int arg_function[thread_num];
    for(int i = 0;i<thread_num;i++){
        arg_function[i] = i;
        pthread_create(&thread[i],NULL,Series_Function,&arg_function[i]);
    }
    for(int i = 0;i<thread_num;i++){
        pthread_join(thread[i],NULL);
    }
    printf("pi is : %f\n",pi);
    exit(0); //进程结束
}

最后运行代码结果well done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值