进程间通信-2-160919

本文通过对比单进程和多进程实现求素数的过程,展示了多进程编程的优势。具体包括使用fork创建子进程来并行计算指定范围内的素数,显著提高了程序运行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

举个例子说明多进程的应用。求素数。编译之后,运行的时候 time ./a.out 可以看到运行时间,会发现后者节省了很多时间

如果不想看输出,指向看运行时间的话: time ./a.out > /dev/null 把输出重定向到null


//==================未使用fork进程 单机版==========================

#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#define LEFT 30000000
#define RIGHT 30000200
int main()
{
    int i,j,mark;
    for(i = LEFT;i<=RIGHT;i++)
    {
        mark = 1;
        for(j = 2;j<i/2;j++)
        {

            if(i%j == 0)
            {
                mark = 0;
            }

        }
        if(mark==1)
            printf("%d is a primer\n",i);

     }

  

    exit(0);
}

//====================使用fork的 多进程版====================================

//运行结果是无顺序的,或者命令行先出来,结果后出来

#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#define LEFT 30000000
#define RIGHT 30000200
int main()
{
    int i,j,mark;
    pid_t pid;
    for(i = LEFT;i<=RIGHT;i++)
    {  

      fflush(NULL);


        pid =fork();
        if(pid<0)
        {
            perror("fork()") ;
            exit(1);
        }

        if(pid ==0)
        {
            mark = 1;
            for(j = 2;j<i/2;j++)
            {

                if(i%j == 0)
                {
                    mark = 0;
                    break;
                }

            }
            if(mark)
                printf("%d is a primer\n",i);
            exit(0);//进程结束,需要exit 
            
        }
     }

  

    exit(0);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值