博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux高编进程------进程分配
阅读量:6449 次
发布时间:2019-06-23

本文共 1787 字,大约阅读时间需要 5 分钟。

筛质数进阶

之前筛质数程序创建了201个子进程,由于进程号有限,所以可以采用以下三种方法

1、分块法:将201个子进程分成N等份。eg:N=3,那么201个子进程平均分成3份

2.交叉分配法:将201个子进程依次分配给N个进程

 

3.进程池:用一个进程取质数,并将其丢给下边的线程或者进程处理质数

=====================================================================

交叉分配法:

#include 
#include
#include
#include
#include
#define LEFT 30000000#define RIGHT 30000200#define N 3int main(void){ int i , j , mark , n; pid_t pid ; for(n = 0 ; n < N ; n++) { //1.父进程创建3个子进程 pid = fork(); //2.失败判断(并不完善) if(pid < 0) { perror("fork()");//需要将之前fork的释放 exit(1); } //3.子进程 if(pid == 0) { for(i = LEFT+n ; i <= RIGHT ; i+=N) { mark = 1 ; for(j = 2 ;j < i/2 ; j++) { if(i % j == 0) { mark = 0 ; break; } } if(mark) printf("[%d]%d is a primer\n",n,i); } exit(0); } } //4.收尸 for(n = 0 ; n < N ; n++) wait(NULL); exit(0);}

结果:

[1]30000001 is a primer[2]30000023 is a primer[1]30000037 is a primer[2]30000041 is a primer[2]30000059 is a primer[1]30000049 is a primer[1]30000079 is a primer[2]30000071 is a primer[1]30000109 is a primer[2]30000083 is a primer[1]30000133 is a primer[2]30000137 is a primer[1]30000163 is a primer[2]30000149 is a primer[1]30000169 is a primer[2]30000167 is a primer[1]30000193 is a primer[1]30000199 is a primer

============================================================================

 

转载于:https://www.cnblogs.com/muzihuan/p/5286423.html

你可能感兴趣的文章
prepare for travel 旅行准备
查看>>
再次更新
查看>>
perl杂记
查看>>
go语言安装使用
查看>>
iOS开发代理(委托)模式详解
查看>>
微服务学习笔记二:Eureka服务注册发现
查看>>
C# 获取编码
查看>>
mysql的数据类型int、bigint、smallint 和 tinyint取值范围
查看>>
利用网易获取所有股票数据
查看>>
HDOJ5015 233 Matrix(矩阵乘法加速递推)
查看>>
三种局域网扫描工具比较
查看>>
移动铁通宽带上网设置教程
查看>>
java中判断字符串中是否有中文字符
查看>>
Python算法(含源代码下载)
查看>>
利用Windows自带的Certutil查看文件MD5
查看>>
Git处理 行结束符
查看>>
通过原生js添加div和css
查看>>
[训练日志] 7月13日
查看>>
Python 模块 和 包
查看>>
简单的导出表格和将表格下载到桌面上。
查看>>