题目:

链接


多进程:

#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. jQuery基础--创建节点和 添加节点

    创建节点 $(function () { // var box = document.getElementById("box"); // // var a = document.c ...

  2. OAUTH2.0协议-菜鸟级

    OAUTH2.0入门必看 一.摘要 OAUTH协议为用户资源的授权提供了一个安全的.开放而又简易的标准.与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即 ...

  3. spring boot 控制 序列化格式

    @PostMapping(path = "/register", produces={MediaType.APPLICATION_JSON_VALUE, MediaType.TEX ...

  4. SpringMvc和Mybatis整合需要配置的xml

    applicationContext-dao.xml <?xml version="1.0" encoding="UTF-8"?> <bean ...

  5. [Bzoj1731]排队布局

    洛谷上的翻译是真的哲学♂♂♂ 非常van的题目传送门♂♂♂ 个人认为这题充其量也就是个蓝(nan)题,首先处理-1的情况,-1的情况是不等式组无解,按照差分约束的规则,无解说明出现了负环,先跑一遍以0 ...

  6. C# WCF 服务引用与Web引用

    参考:https://blog.csdn.net/yelin042/article/details/82770205

  7. 设置第一个以外的元素样式:not(:first-child),设置最后一个除外的元素样式:not(:last-child)

    代码截图:

  8. MySQL数据库使用xtrabackup备份实现小例子

    关于MySQL数据库的备份的工具和方式也比较多,本文只简单介绍一些我司一个平台的备份方案.Xtrabackup是由percona开源的免费数据库热备份软件,但是只能对InnoDB数据库和XtraDB存 ...

  9. 脚本_监控 HTTP 服务器的状态

    #!bin/bash#功能:监控 HTTP 服务器的状态(测试返回码) #作者:liusingbon#设置变量,url 为你需要检测的目标网站的网址(IP 或域名)url=http://192.168 ...

  10. 续上文,中的\\u00a0是怎么解释出来的

    public String utf8ToUnicode(String inStr) { char[] myBuffer = inStr.toCharArray(); StringBuffer sb = ...