- 论坛徽章:
- 0
|
以下为linux环境下的操作系统“进程控制”实验相关部分:
#include<stdio.h>
main()
{
int p1,p2,i;
if(p1=fork())
{
lockf(1,1,0);
for(i=0;i<5000;i++)
printf("child %d\n",i);
lockf(1,0,0);
}
else
{
if(p2=fork())
{
lockf(1,1,0);
for(i=0;i<5000;i++) printf("son %d\n",i);
lockf(1,0,0);
}
else
{
lockf(1,1,0);
for(i=0;i<5000;i++) printf("daughter %d\n",i);
lockf(1,0,0);
}
}
}
这个实验的目的是想让学生体会到加上lockf的作用,可以互斥的显示在屏幕上。即:完全输出child后完全输出son或者再完全输出daughter。
但是真正做实验的时候,发现三个进程还是并发的把结果显示在屏幕上,即:child输出到4000多行,就又开始输出son了。。。。
请问这是为什么呢?错在哪里呢?lockf()不就是加锁,能够保证互斥吗?
请高手回答,谢谢! |
|