题目:

链接


多进程:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h> #define n 100000000.0 int main()
{
int fd[];
// 创建二个 fd, fd[0] 管道用于读, fd[1] 管道用于写
pipe(fd); // 创建进程
pid_t pid;
for(int i = ; i < ; ++i)
{
pid = fork();
if(pid == )
{
double sum = 0.0;
for(int j = (int)(i*(n/)); j < (int)((i+)*(n/)); j++)
{
double temp = ( / ( + ((j + 0.5)/n)*((j + 0.5)/n)))*(1.0/n);
sum += temp;
}
write(fd[], &sum, sizeof(double));
exit();
}
}
//计算求和
double ans = 0.0;
for(int i = ; i < ; ++i)
{
double temp;
read(fd[], &temp, sizeof(double));
ans += temp;
} printf("the ans is %.20lf\n", ans); return ;
}

多线程:

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <assert.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <pthread.h> void * sumpi1(void * arg);
void * sumpi2(void * arg); double * pret;
double * pret1;
double ret,ret1; int main()
{
//定义两个线程标识符
pthread_t pthread1, pthread2;
//两个线程退出后的返回值
void * thread1_return;
void * thread2_return;
//判断线程创建成功否
int check_create;
//判断线程退出成功否
int check_end; double ans = 0.0;
double n = 10000000.0;
// 创建两个线程
check_create = pthread_create(&pthread1, NULL, sumpi1, (void *)&n); if(check_create !=){
printf("Thread creation failed");
exit();
} check_create = pthread_create(&pthread2, NULL, sumpi2, (void *)&n); if(check_create !=){
printf("Thread creation failed");
exit();
} //等待第一个线程退出,并接收它的返回值(返回值存储在thread1_return)
check_end = pthread_join(pthread1, &thread1_return); if(check_end != ){
printf("Thread end failed");
exit();
}
printf("%.20lf\n" ,*(double *)thread1_return);
//cout << thread1_return << endl;
ans += (*(double*)thread1_return); //等待第二个线程退出,并接收它的返回值(返回值存储在thread2_return)
check_end = pthread_join(pthread2, &thread2_return); if(check_end != ){
printf("Thread end failed");
exit();
}
printf("%.20lf\n" ,*(double *)thread2_return);
ans += (*(double*)thread2_return); printf("the pi is %.20lf\n" ,ans); return ;
} void * sumpi1(void * arg)
{
double n = *(double *)arg;
ret1 = 0.0;
for(int i = ; i < n/; i++)
{
double temp = ( / ( + ((i + 0.5)/n)*((i + 0.5)/n)))*(1.0/n);
ret1 += temp;
}
//printf("%.20lf\n", ret1);
//double *
pret1 = &ret1;
pthread_exit((void*)pret1);
} void * sumpi2(void * arg)
{
double n = *(double *)arg;
ret = 0.0;
for(int i = n/; i <= n; i++)
{
double temp = ( / ( + ((i + 0.5)/n)*((i + 0.5)/n)))*(1.0/n);
ret += temp;
}
//double *
pret = &ret;
//printf("%.20lf\n", *pret);
pthread_exit((void *)pret);
}

Linux编程 多进程,多线程求解PI(圆周率)的更多相关文章

  1. [转帖]Windows和Linux对决(多进程多线程)

    Windows和Linux对决(多进程多线程) https://blog.csdn.net/world_2015/article/details/44920467 太长了 还没看完.. 还是没太理解好 ...

  2. linux编程之多线程编程

    我们知道,进程在各自独立的地址空间中运行,进程之间共享数据需要用mmap或者进程间通信机制,有些情况需要在一个进程中同时执行多个控制流程,这时候线程就派上了用场,比如实现一个图形界面的下载软件,一方面 ...

  3. 【转】 Linux下的多线程编程

    作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/原文链接:http://www.cnblogs.com/gnuhpc/archive/2012/12/07/280 ...

  4. Linux下的多线程编程

    1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的 Unix也支持线程的概念,但是在一个进程(proces ...

  5. 【转】Linux下的多线程编程

    1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的 Unix也支持线程的概念,但是在一个进程(proces ...

  6. 《转》Linux下的多线程编程

    原地址:http://linux.chinaunix.net/doc/program/2001-08-11/642.shtml 1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程 ...

  7. Linux 多进程多线程相关概念

    进程:可执行程序是存储在磁盘设备上的由代码和数据按某种格式组织的静态实体,而进程是可被调度的代码的动态运行.在Linux系统中,每个进程都有各自的生命周期.在一个进程的生命周期中,都有各自的运行环境以 ...

  8. Cpython解释器下实现并发编程——多进程、多线程、协程、IO模型

    一.背景知识 进程即正在执行的一个过程.进程是对正在运行的程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所有内容都 ...

  9. linux 下 多进程与多线程

    [Linux]多进程与多线程之间的区别 http://blog.csdn.net/byrsongqq/article/details/6339240 网络编程中设计并发服务器,使用多进程与多线程 ,请 ...

随机推荐

  1. mysql 主从复制 (1)

    Mysql主从配置 大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据 ...

  2. mysql-时间格式

    SELECT DATE_FORMAT('2019-1-1 15:1:1.099','%Y-%m-%d %H:%i:%s.%f') -- 2019-01-01 15:01:01.099000 %a  缩 ...

  3. Libre OJ 2255 (线段树优化建图+Tarjan缩点+DP)

    题面 传送门 分析 主体思路:若x能引爆y,从x向y连一条有向边,最后的答案就是从x出发能够到达的点的个数 首先我们发现一个炸弹可以波及到的范围一定是坐标轴上的一段连续区间 我们可以用二分查找求出炸弹 ...

  4. Zookeeper之启动常见错误及解决方法

    Zookeeper启动后,有时候没有真正的启动,那我们如何查找错误呢,就可以查看zookeeper目录下面的zookeeper.out文件,就可以查看到错误了.zookeeper.out文件比较的重要 ...

  5. rpm2cpio - 从 RPM 软件包中提取 cpio 归档

    SYNOPSIS rpm2cpio [filename] DESCRIPTION rpm2cpio 将指定的一个 .rpm 文件转换为一个 cpio 文档,输出到标准输出.如果给出了 `-' 参数,那 ...

  6. linux单机部署kafka(filebeat+elk组合)

    filebeat+elk组合之kafka单机部署 准备: kafka下载链接地址:http://kafka.apache.org/downloads.html 在这里下载kafka_2.12-2.10 ...

  7. 搭建个人使用服务器-vultr

    内容来自https://www.noobyy.com/31.html  谢谢教程,侵权的话会立即删除! 1. 首先进入Vultr官网注册:https://www.vultr.com 注册完开始充值,我 ...

  8. [BJOI2006]狼抓兔子(网络流)

    题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...

  9. 工欲善其事,必先利其器——React Native的 IDE

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yayayaya20122012/article/details/51119801之前的文章中,我们已 ...

  10. Ubuntu 服务器Webmin错误的解决

    一:This web server is running in SSL mode. Try the URL https://***********:10000/ instead. 解决方案: 1.ss ...