- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
作业实验1~3
操作系统实验1~3 理学院 信息与计算科学1303 许艳红 学号 2013310200724
实验1
1建立两个子进程
#includestdio.h
main()
{
int childpid1,childpid2;
while((childpid1=fork())==-1);
if(childpid1==0)
putchar(b);
else
{
while((childpid2=fork())==-1);
if(childpid2==0)
putchar(c);
else
putchar(a);
}
}
运行结果acb,bca,bac等,因为fork()创建进程的时间多于输出一个字符的时间,所以当创建进程2时,进程1一输出‘b,又进程2和主程序输出字符的次序具有随机性,所以会出现多种情况。
输出一句话
#include stdio.h
int main()
{
int pid;
pid=fork();
if(pid==0)
printf(I am son,my pid is %d.\n,getpid());
else if(pid0)
{
printf(Im father ,my pid is %d.\n,getpid());
pid=fork();
if(pid==0)
printf(Im daughter process,my pid is %d.\n,getpid());
else if(pid0)
printf(Im father process,my pid is %d.\n,getpid());
else
printf(fork() error.\n);
}
else printf(fork() error.\n);
}
因为输出函数printf()输出字符时不会中断,所以输出的每句话就相当于一个字符,最终也会有多种情况。
进程加锁
#include stdio.h
int main()
{
int pid;
pid=fork();
if(pid==0)
printf(I am son,my pid is %d.\n,getpid());
lockf(1,0,0);
else if(pid0)
{
/*从子进程1返回到父进程时,再创建子进程2。*/
printf(Im father ,my pid is %d.\n,getpid());
pid=fork();
if(pid==0)
lockf(1,0,0);
pri
文档评论(0)