Loading

操作系统 实验三

1. 实验目的及要求

分析进程争用临界资源的现象,学习解决进程互斥的方法。

2. 实验内容

Linux****进程控制 lockf()

利用系统调用lockf(fd,mode,size),对指定区域(有size指示)进行加锁或解锁,以实现进程的同步或互斥。其中,fd是文件描述字;mode是锁定方式,mode=1表示加锁,mode=0表示解锁;size是指定文件fd的指定区域,用0表示从当前位置到文件结尾(注:有些Linux系统是locking(fd,mode,size))

3. 实验源码

#include <stdio.h>

#include <sys/types.h>

#include <unistd.h>

 

int main()

{

   int pid1, pid2, i;

   lockf(1,1,0);

   printf("\n\ni'm father\n");

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

   if(pid1 == 0)

   {

​      lockf(1,1,0);

​      printf("\n\ni'm son\n");

​      for (i = 0; i < 99; i++)

​         printf(" %d", i);

​      lockf(1,0,0);

​      return 1;

   }

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

   if(pid2 == 0)

   {

​      lockf(1,1,0);

​      printf("\n\ni'm daughter\n");

​      for (i = 0; i < 99; i++)

​         printf(" %d", i);

​      lockf(1,0,0);

​      return 2;

   }

   printf("\n");

   return 0;

}

4. 实验结果

结果分析

首先是在父进程中创建了一个子进程,子进程需要输出文本信息,并且在输出语句执行之前,将标准输出设备锁住,在输出语句执行之后,将标准输出设备解锁。同样,父进程也是要输出文本信息,对标准输出的操作同子进程。这样做能够防止父进程和子进程竞争标准输出(屏幕)资源,即如果父进程正在进行屏幕打印操作,则子进程将无法获得屏幕。

posted @ 2020-12-25 23:10  桥木  阅读(256)  评论(0)    收藏  举报