#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)、多线程的性能是否一定比多进程的性能好?如果不是,请举例说明。
不一定,在目标子动能交互少的情况下,用多进程更好。