日期:2014-05-17  浏览次数:21271 次

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来控制。