码迷,mamicode.com
首页 > 系统相关 > 详细

进程分配

时间:2016-03-17 11:03:18      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:

筛质数进阶

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

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

技术分享

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

 

技术分享

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

技术分享

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

交叉分配法:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

#define LEFT    30000000
#define RIGHT   30000200
#define N       3

int 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

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

 

进程分配

标签:

原文地址:http://www.cnblogs.com/muzihuan/p/5286423.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!