操作系统上机作业--根据莱布尼兹级数计算PI(2)(多线程)
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=¶ms[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)(多线程)相关推荐
- 操作系统上机作业--根据莱布尼兹级数计算PI(1)(多线程)
pi1.c: 使用2个线程根据莱布尼兹级数计算PI • 莱布尼兹级数公式: 1 - 1/3 + 1/5 - 1/7 + 1/9 - ... = PI/4 • 主线程创建1个辅助线程 • 主线程计算级数 ...
- 多线程初体验——使用2个线程根据莱布尼兹级数计算PI、多线程排序
2022.04.24 job7/pi1.c: 使用2个线程根据莱布尼兹级数计算PI 要求 莱布尼兹级数公式: 1 - 1/3 + 1/5 - 1/7 + 1/9 - - = PI/4 主线程创建1个辅 ...
- 多线程|pi2.c 使用N个线程根据莱布尼兹级数计算PI
1.题目要求 使用N个线程根据莱布尼兹级数计算PI 与上一题类似,但本题更加通用化,能适应N个核心 主线程创建N个辅助线程 每个辅助线程计算一部分任务,并将结果返回 主线程等待N个辅助线程运行结束,将 ...
- 多线程|pi1.c 使用2个线程根据莱布尼兹级数计算PI
1.题目要求 使用2个线程根据莱布尼兹级数计算PI 莱布尼兹级数公式: 1 - 1/3 + 1/5 - 1/7 + 1/9 - - = PI/4 主线程创建1个辅助线程 主线程计算级数的前半部分 辅助 ...
- 操作系统上机作业--使用条件变量解决生产者、计算者、消费者问题(多线程)
pc1.c: 使用条件变量解决生产者.计算者.消费者问题 /* • 系统中有3个线程:生产者.计算者.消费者 • 系统中有2个容量为4的缓冲区:buffer1.buffer2 • 生产者生产'a'.' ...
- 操作系统上机作业--创建N个线程(多线程)
ring.c: 创建N个线程,它们构成一个环 • 创建N个线程:T1.T2.T3.- TN • T1向T2发送整数1 • T2收到后将整数加1 • T2向T3发送整数2 • T3收到后将整数加1 • ...
- 操作系统上机作业-- 使用信号量解决生产者、计算者、消费者问题(多线程)
pc2.c: 使用信号量解决生产者.计算者.消费者问题 • 功能和前面的实验相同,使用信号量解决 实现思路: 生产者.计算者.消费者三者之间的关系和上一个编程任务一样,不一样的是,将互斥量.条件变量封 ...
- 操作系统上机作业--多线程排序
sort.c: 多线程排序 • 主线程创建一个辅助线程 • 主线程使用选择排序算法对数组的前半部分排序 • 辅助线程使用选择排序算法对数组的后半部分排序 • 主线程等待辅助线程运行結束后,使用归并排序 ...
- 操作系统上机作业--实现shell(2)(多进程)
sh2.c: 实现shell程序,要求在第1版的基础上,添加如下功能 • 实现文件重定向 • $ echo hello >log • $ cat log • Hello 实现思路: 和sh1.c ...
最新文章
- mysql使用sha256密码,MySQL5.6启用sha256_password插件
- 攻克指针(二)精华篇
- PgSQL · 应用案例 · 阿里云 RDS PostgreSQL 高并发特性 vs 社区版本
- 点击调用ajax,jQuery ajax在点击时调用,仅工作一次
- 【原】时势造英雄 Times makes heros, while heros shape the times!
- 2016年10月30日表单标签与样式表分类和选择器
- 高仿阴阳师官网轮播图效果的jQuery插件
- winr8文件服务器,技术讨论 | Windows全版本提权之Win10系列解析
- 浅析Ruby on Rails部署方案(三)
- 【竞赛篇-国创(大创)线上报告撰写(常用套话总结)】季度报告、中期报告、结题报告怎么写,用什么格式,附件传什么比较好
- FPGA驱动VGA显示
- 国际标准智商测试题目
- 一个大二渣渣准程序员的感动
- C# 把汉字转换成拼音(全拼)
- 适合程序员使用的二进制计算器Megatops BinCalc
- 输入年,月,输出这一年的这个月有多少天
- 阿里云短信服务(JAVA)
- linux 流量 脚本,实时查看linux网卡流量脚本
- 民办大学计算机专业教师,考生被民办大学录取,看到高昂学费想放弃,老师坦言这个专业值得...
- 数学与计算机科学奖 许晨阳,未来科学大奖许晨阳:数学令我心存感激
热门文章
- 远程修改linux文件内容,用VS Code连接远程Linux服务器实时修改代码
- 物理服务器备份系统,物理备份和逻辑备份区别
- git提交代码到自己的分支,并合并到主分支的完整流程。
- 2019年12月份最热门 Github 开源项目整理
- EditThisCookie使用
- mysql分组区某列最后一条_[MySQL]MySQL数据库如何按某列分组排序后查询每个分组的最后一条数据?...
- Java面试题2019简书_2019最新Spring面试题大全含答案之Spring Beans(2019最全Spring超级葵花宝典)...
- js 中对于 css 的变量操作(React也可)
- jsp中@import导入外部样式表与link链入外部样式表的区别
- 实现输入框小数多 自动进位展示,编辑时实际值不变