linux的fork函数使用与加锁lockf()
完善下面一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每个进程在屏幕上显示一个字符:父进程显示字符”a”,子进程分别显示字符”b”和”c”。观察记录屏幕上的显示结果,并分析原因。
#include <stdio.h>
main()
{
int p1,p2;
while( (p1=fork())==-1 );
if( p1==0 )
putchar(' b');
else
{
while( (p2=fork())==-1 );
if( p2==0 )
putchar(' c');
else
putchar(' a');
}
}
3. 进程的控制
修改上面程序,将每个进程的输出由单个字符改为短语(如让父进程显示字符串”parent”),观察程序执行结果,并分析其原因。
如果在程序中使用系统调用lockf()给每个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。
请高手指点:上面的程序执行后结果是cb,但是写到第三步(进程的控制)的时候,用printf代替putchar时 输出是acb,不知在为什么,还有加锁行数不知怎么回事;谢谢高手指点
------解决方案-------------------- 多进程输出的顺序是不固定的,可能bc,也可能cb,要实现固定的先后顺序,可以加sleep函数,让某个进程sleep几秒,这样就能控制了。
lockf只能控制进程间的互斥,不能控制屏幕的顺序,加了看不到实际的效果,当然也可以把内容写到文件里,用lockf来控制。