永发信息网

帮忙解释下这个C语言程序

答案:4  悬赏:0  手机版
解决时间 2021-05-05 07:13

#include<stdlib.h>

#include<stdio.h>

int main()

{

int p1 ,p2,i;

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

if(!p1)

{

for(i=0;i<5;i++)

{

printf("child %d\n",i);

sleep(1);

}

exit(0);

}

else

{

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

if(!p2)

{

for(i=0;i<5;i++)

{

printf("son %d\n",i);

sleep(1);

}

exit(0);

}

for(i=0;i<5;i++)

{

printf("parent %d\n",i);

sleep(1);

}

exit(0);

}

}

#include<stdio.h>

#include<stdlib.h>

int main()

{

int p1 ,p2,i;

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

if(!p1)

{

lockf(1,1,0);

for(i=0;i<5;i++)

{

printf("child %d\n",i);

sleep(1);

}

lockf(1,0,0);

exit(0);

}

else

{

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

if(!p2)

{

lockf(1,0,0);

exit(0);

}

wait(0);

wait(0);

lockf(1,0,0);

for(i=0;i<5;i++)

{

printf("parent %d\n",i);

sleep(1);

}

lockf(1,0,0);

exit(0);

}

}

最佳答案

#include<stdlib.h>


#include<stdio.h>


int main()


{


int p1 ,p2,i; //定义三个整形变量 p1,p2,i


while((p1=fork())==-1); //p1=fork(),fork()是一个函数返回值为整形,如果p1=-1就循环(代码这里应是个错


误,while应该有循环体,这里没有循环体就会执行下一步)


if(!p1) //如果p1不为0 执行{}


{


for(i=0;i<5;i++) //循环5次


{


printf("child %d\n",i); //输出child i值


sleep(1); //暂停1微妙


}


exit(0); //退出


}


else //否则(p1=0)


{


while((p2=fork())==-1); //p1=fork(),fork()是一个函数返回值为整形,如果p1=-1就循环,和上边类似


if(!p2) //如果P2不等于0执行{}


{


for(i=0;i<5;i++) //循环5次


{


printf("son %d\n",i); //输出 son i值i=0,1,2,3,4


sleep(1); //暂停1微妙


}


exit(0); //退出


}


for(i=0;i<5;i++) //循环5次


{


printf("parent %d\n",i); //输出parent i值 i=0,1,2,3,4


sleep(1); //暂停1微妙


}


exit(0);//退出


}


}








#include<stdio.h>


#include<stdlib.h>


int main()


{


int p1 ,p2,i; //定义三个整形变量 p1,p2,i


while ((p1=fork())==-1);//p1=fork(),fork()是一个函数返回值为整形,如果p1=-1就执行循环(这里没有{}循


//环体会直接计入下一步)


if(!p1) //如果p1不为0 执行{}


{


lockf(1,1,0); //lockf()应是一个自定义函数,该函数有三个参数分别而给这三个参数赋值1,1,0


for(i=0;i<5;i++) //5次循环


{


printf("child %d\n",i); //输出child i值i=0,1,2,3,4


sleep(1); //暂停1微妙


}


lockf(1,0,0); //lockf()应是一个自定义函数,该函数有三个参数分别而给这三个参数赋值1,1,0


exit(0); //输入0退出


}


else 如果p1为0 执行{}


{


while((p2=fork())==-1); //p2=fork(),fork()是一个函数返回值为整形,如果p2=-1就执行循环(这里没有{}循


//环体会直接计入下一步)


if(!p2) //如果P2不为0


{


lockf(1,0,0); //lockf()应是一个自定义函数,该函数有三个参数分别而给这三个参数赋值1,1,0


exit(0); //输入0退出


}


wait(0); //异步等待,直到返回结果


wait(0);


lockf(1,0,0);//lockf()应是一个自定义函数,该函数有三个参数分别而给这三个参数赋值1,1,0


for(i=0;i<5;i++) //循环5次


{


printf("parent %d\n",i); //输出parent i值 i=0,1,2,3,4


sleep(1); //暂停1微妙


}


lockf(1,0,0);//现在看来这个函数可能是用来控制线程的锁


exit(0); //输入0退出


}


}

全部回答

示例一

主线程创建二个子线程,三个线程交替进行混乱输出(输出次数大于五)

示例二 加入了文件锁

主线程创建二个子线程,三个线程交替进行五次输出

#include<stdlib.h>

#include<stdio.h>

int main()

{ int p1 ,p2,i; while((p1=fork())==-1);// 先得到函数fork()的值赋给 p1,如果p1==-1,什么也不做继续空循环; // 如果 p1 != -1, 结束while循环往下执行;

if(!p1)// 如果 p1 == 0 { for(i=0;i<5;i++) {// 输出 child 0 到 child 4 printf("child %d\n",i);// 输出 sleep(1);// 暂停 1 毫秒; } exit(0);// 结束程序 } else// // 如果 p1 != 0 { while((p2=fork())==-1);// 先得到函数fork()的值赋给 p2,如果p2==-1,什么也不做继续空循环; // 如果 p2 != -1, 结束while循环往下执行; if(!p2)// 如果 p2 == 0 { for(i=0;i<5;i++) { printf("son %d\n",i);// 输出 sleep(1);// 暂停 1 毫秒; } exit(0);// 结束程序 } for(i=0;i<5;i++) { printf("parent %d\n",i); sleep(1);// 暂停 1 毫秒; } exit(0);// 结束程序 } }

#include<stdio.h>

#include<stdlib.h>

int main()

{ int p1 ,p2,i; while ((p1=fork())==-1);// 先得到函数fork()的值赋给 p1,如果p1==-1,什么也不做继续空循环; // 如果 p1 != -1, 结束while循环往下执行; if(!p1) { lockf(1,1,0);// 调用 lockf 函数; for(i=0;i<5;i++) { printf("child %d\n",i); sleep(1); } lockf(1,0,0); exit(0); } else { while((p2=fork())==-1); if(!p2) { lockf(1,0,0); exit(0); } wait(0); wait(0); lockf(1,0,0); for(i=0;i<5;i++) { printf("parent %d\n",i); sleep(1); } lockf(1,0,0); exit(0); } }

使用fork()来获取进程ID,赋值给p1

进入循环,直到p1获取ID出错

{

如果是父进程,就输出5次child,结束

如果是子进程,就输出5次son,结束

}

不进入循环输出parent,结束

sleep是延迟

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
会不会从恋人变成仇人
布上粘上粘性胶了怎么去掉?
手脚发酸发胀
电吉他初学有哪些solo
豹猫多少钱一只,专业的看看这什么品种的猫 多
自己幻想在星期1的几点开始处理转区?
怎么开通空间后怎么在业务那没显示图标?
DNF刷悬空 禁地能爆出值钱装备吗?
有好听的歌推荐下
有认识南通二附小学或实验小学负责人的吗
求PSP模拟PS游戏蒙面超人亚极陀游戏下载
周杰伦 好久不见
为什么很久没有李金羽的消息了?为什么不上场
跳舞写的恶魔法则的补全篇补完了吗,补完有的
三毛关于沙漠的句子,三毛到过哪些沙漠﹖
推荐资讯
石冲铺我想知道这个在什么地方
在尿素中NH2一定是化学式,而铵根的原子团符
如何能最快成为网络高手?
时间真的能吞噬爱情吗?
怎么解手机屏幕数字锁,手机屏幕数字解锁密码
寻仙里韩清真人在哪?
时来运餐馆在什么地方啊,我要过去处理事情
诺基亚N97i昨天晚上有86块的花费今天怎么就停
第一个字母是p第三个字母u的单词
找小说!有个人到了异界,后来杀了一个跟他长
小黄飞唱的什么歌?
我不知道我现在改怎么办,我很迷茫
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?