pi2.c: 使用N个线程根据莱布尼兹级数计算PI

•   与上一题类似,但本题更加通用化,能适应N个核心,需要使用线程参数来实现
•   主线程创建N个辅助线程
•   每个辅助线程计算一部分任务,并将结果返回
•   主线程等待N个辅助线程运行结束,将所有辅助线程的结果累加

实现思路:
N为创建线程的个数,在main()函数控制创建的线程的个数,并在创建线程时,根据创建的顺序向void *worker(void *arg)函数传递相应的参数,控制线程计算起始值。通过return result;将计算结果返回,在主函数中通过pthread_join()接受result,累加起来,乘四,得计算结果。
实现代码:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<pthread.h>#define NUMBER 200
#define N 100struct param{int start;int end;
};
struct result{double worker_output;
};void *worker(void *arg){int i;double j;struct param *param;struct result *result;double worker_output=0;param=(struct param*)arg;for(i=param->start;i<=param->end;i++){j=i;if(i%2==0)worker_output-=1/(2*j-1);elseworker_output+=1/(2*j-1);}result=malloc(sizeof(struct result));result->worker_output=worker_output;return result;
}int main(){int i;pthread_t worker_tids[N];struct param params[N];double sum=0;for(i=0;i<N;i++){struct param *param;param=&params[i];param->start=i*NUMBER +1;param->end=(i+1)*NUMBER;pthread_create(&worker_tids[i],NULL,worker,param);}for(i=0;i<N;i++){struct result *result;pthread_join(worker_tids[i],(void **)&result);sum+=result->worker_output;free(result);}printf("PI: %f\n",sum*4);return 0;
}


欢迎留言交流。。。

操作系统上机作业--根据莱布尼兹级数计算PI(2)(多线程)相关推荐

  1. 操作系统上机作业--根据莱布尼兹级数计算PI(1)(多线程)

    pi1.c: 使用2个线程根据莱布尼兹级数计算PI • 莱布尼兹级数公式: 1 - 1/3 + 1/5 - 1/7 + 1/9 - ... = PI/4 • 主线程创建1个辅助线程 • 主线程计算级数 ...

  2. 多线程初体验——使用2个线程根据莱布尼兹级数计算PI、多线程排序

    2022.04.24 job7/pi1.c: 使用2个线程根据莱布尼兹级数计算PI 要求 莱布尼兹级数公式: 1 - 1/3 + 1/5 - 1/7 + 1/9 - - = PI/4 主线程创建1个辅 ...

  3. 多线程|pi2.c 使用N个线程根据莱布尼兹级数计算PI

    1.题目要求 使用N个线程根据莱布尼兹级数计算PI 与上一题类似,但本题更加通用化,能适应N个核心 主线程创建N个辅助线程 每个辅助线程计算一部分任务,并将结果返回 主线程等待N个辅助线程运行结束,将 ...

  4. 多线程|pi1.c 使用2个线程根据莱布尼兹级数计算PI

    1.题目要求 使用2个线程根据莱布尼兹级数计算PI 莱布尼兹级数公式: 1 - 1/3 + 1/5 - 1/7 + 1/9 - - = PI/4 主线程创建1个辅助线程 主线程计算级数的前半部分 辅助 ...

  5. 操作系统上机作业--使用条件变量解决生产者、计算者、消费者问题(多线程)

    pc1.c: 使用条件变量解决生产者.计算者.消费者问题 /* • 系统中有3个线程:生产者.计算者.消费者 • 系统中有2个容量为4的缓冲区:buffer1.buffer2 • 生产者生产'a'.' ...

  6. 操作系统上机作业--创建N个线程(多线程)

    ring.c: 创建N个线程,它们构成一个环 • 创建N个线程:T1.T2.T3.- TN • T1向T2发送整数1 • T2收到后将整数加1 • T2向T3发送整数2 • T3收到后将整数加1 • ...

  7. 操作系统上机作业-- 使用信号量解决生产者、计算者、消费者问题(多线程)

    pc2.c: 使用信号量解决生产者.计算者.消费者问题 • 功能和前面的实验相同,使用信号量解决 实现思路: 生产者.计算者.消费者三者之间的关系和上一个编程任务一样,不一样的是,将互斥量.条件变量封 ...

  8. 操作系统上机作业--多线程排序

    sort.c: 多线程排序 • 主线程创建一个辅助线程 • 主线程使用选择排序算法对数组的前半部分排序 • 辅助线程使用选择排序算法对数组的后半部分排序 • 主线程等待辅助线程运行結束后,使用归并排序 ...

  9. 操作系统上机作业--实现shell(2)(多进程)

    sh2.c: 实现shell程序,要求在第1版的基础上,添加如下功能 • 实现文件重定向 • $ echo hello >log • $ cat log • Hello 实现思路: 和sh1.c ...

最新文章

  1. mysql使用sha256密码,MySQL5.6启用sha256_password插件
  2. 攻克指针(二)精华篇
  3. PgSQL · 应用案例 · 阿里云 RDS PostgreSQL 高并发特性 vs 社区版本
  4. 点击调用ajax,jQuery ajax在点击时调用,仅工作一次
  5. 【原】时势造英雄 Times makes heros, while heros shape the times!
  6. 2016年10月30日表单标签与样式表分类和选择器
  7. 高仿阴阳师官网轮播图效果的jQuery插件
  8. winr8文件服务器,技术讨论 | Windows全版本提权之Win10系列解析
  9. 浅析Ruby on Rails部署方案(三)
  10. 【竞赛篇-国创(大创)线上报告撰写(常用套话总结)】季度报告、中期报告、结题报告怎么写,用什么格式,附件传什么比较好
  11. FPGA驱动VGA显示
  12. 国际标准智商测试题目
  13. 一个大二渣渣准程序员的感动
  14. C# 把汉字转换成拼音(全拼)
  15. 适合程序员使用的二进制计算器Megatops BinCalc
  16. 输入年,月,输出这一年的这个月有多少天
  17. 阿里云短信服务(JAVA)
  18. linux 流量 脚本,实时查看linux网卡流量脚本
  19. 民办大学计算机专业教师,考生被民办大学录取,看到高昂学费想放弃,老师坦言这个专业值得...
  20. 数学与计算机科学奖 许晨阳,未来科学大奖许晨阳:数学令我心存感激

热门文章

  1. 远程修改linux文件内容,用VS Code连接远程Linux服务器实时修改代码
  2. 物理服务器备份系统,物理备份和逻辑备份区别
  3. git提交代码到自己的分支,并合并到主分支的完整流程。
  4. 2019年12月份最热门 Github 开源项目整理
  5. EditThisCookie使用
  6. mysql分组区某列最后一条_[MySQL]MySQL数据库如何按某列分组排序后查询每个分组的最后一条数据?...
  7. Java面试题2019简书_2019最新Spring面试题大全含答案之Spring Beans(2019最全Spring超级葵花宝典)...
  8. js 中对于 css 的变量操作(React也可)
  9. jsp中@import导入外部样式表与link链入外部样式表的区别
  10. 实现输入框小数多 自动进位展示,编辑时实际值不变