实验六linux多进程与进程通信,linux多进程和进程间通信

#includeint pid1,pid2;

main( )

{

int fd[2],i=0,j=0;

char outpipe[100],inpipe1[100],inpipe2[100],outpipe1[100];

pipe(fd); /*创建一个管道*/

while ((pid1=fork( ))==-1);

/*向管道中写入字符*/

lockf(fd[1],1,0);

sprintf(outpipe,"");

write(fd[1],outpipe,50);

lockf(fd[1],0,0);

/*----------------------------------*/

/*子进程1先读取管道中所有的字符,再重新把不需要的字符写入管道*/

if(pid1==0)

{

lockf(fd[0],1,0);

read(fd[0],inpipe1,10);

for(i=0;i<10;i++)//把不需要的字符写入管道

{

if(i%2)

{

outpipe1[j]=inpipe1[i];

j++;

}

}

lockf(fd[1],1,0);

write(fd[1],outpipe1,5);

lockf(fd[1],0,0);//写入结束

sleep(5); /*自我阻塞5秒*/

lockf(fd[0],0,0);

exit(0);

}

/*--------------------------------------------------*/

else

{

/*子进程2从管道中读取字符*/

while((pid2=fork( ))==-1);

if(pid2==0)

{

{

lockf(fd[0],1,0); /*互斥*/

read(fd[0],inpipe2,5);

lockf(fd[0],0,0);

}

sleep(5);

lockf(fd[0],0,0);

exit(0);

}

/*读取结束*/

else

{

wait(0); /*同步*/

read(fd[0],inpipe2,10); /*从管道中读长为50字节的串*/

printf("inpipe2 %s\n",inpipe2);

wait(0);

read(fd[0],inpipe1,10);

printf("inpipe1 %s\n",inpipe1);

exit(0);

}

}

}

实验结果如下:

六、 实验思考

(1)、多进程与多线程相比,各自的优点和缺点是什么?

多进程

多线程

优点

内存隔离,单个进程的异常不会导致整个应用的崩溃。方便调试。

提高系统的并行性,并且开销小。

缺点

进程间调用,通讯和切换开销均比多线程大。

没有内存隔离,单个线程的崩溃会导致整个应用过的退出,有错误使不易定位。

(2)、多线程的性能是否一定比多进程的性能好?如果不是,请举例说明。

不一定,在目标子动能交互少的情况下,用多进程更好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值