实验三进程的同步互斥实验实验目的1、进一步认识并发执行的实质2、分析进程竞争资源的现象,学习解决进程同步互斥的方法实验内容1、编写程序,使用相关函数实现父子进程对共享文件的同步互斥访问。2、修改程序,观察对临界资源访问的互斥控制的作用。实验基础一、临界资源的互斥访问为了实现多进程对临界资源的互斥访问,一个进程访问临界资源的典型程序段类似如下形式:{……….进入区临界区;退出区其余代码;………}其中,进入区中判断资源是否可用,如果可用,则资源数量减1,进程进入临界区;否则进程阻塞等待。退出区中资源数量加1,唤醒阻塞等待该资源的进程。进入区和退出区都是原子操作。操作系统中,通常用信号量来实现进入区和退出区,即P操作和V操作。为了实现用户程序中对某些资源的同步互斥访问,操作系统也提供了一些函数接口,功能类似于对特定临界区的进入区和退出区功能。二、相关的系统调用(1)lockf(files,function,size):用作锁定文件的某些段或者整个文件。函数原型:#include<>intlockf(intfiles,intfunction;longsize)其中:files是文件描述符;参数function可以取以下值:F_LOCK:锁定一个区域。F_ULOCK:解除锁定。参数size指明了从文件当前位置开始的一段连续锁定区域的长度,当size为0时,锁定记录将由当前位置一直扩展到文件尾。如果lockf的参数function取值为F_LOCK,而指定文件的对应区域已被其他进程锁定,那么lockf的调用进程将被阻塞直到该区域解锁。通过使用lockf函数,可实现多进程对共享文件进行互斥访问。进程的实现中,必须使得每个进程在使用文件前对文件加锁,使用文件后解锁。(2)open:打开一个文件函数原型:#include<sys/> #include<sys/> #include<> intopen(char*path,intflags,mode_tmode);其中:参数path是指向所要打开的文件的路径名指针。参数falgs规定如何打开该文件,它必须包含以下值之一:O_RDONLY,只读打开;O_WRONLY,只写打开;O_RDWR,读/写打开;O_CREAT,当文件不存在时创建文件,需参数mode;O_APPEND,不论当前文件位置在何处,将文件指针移至文件尾,为write添加数据到文件;O_TRUNC,当以可写的方式成功打开普通文件时,截断该文件的长度为0。参数mode规定对该文件的访问权限。open系统调用可以只使用前面介绍的这两个参数,省略第三个参数mode。第三个参数是在用O_CREAT创建文件时使用,指出新建文件的存取许可权。由这个参数指出的存取许可权还要和umask进行运算后才得到新建文件的真正存取许可权。该运算是由umask按位取反,再按位与上第三个参数给出的数取或(~umask&mode)。例如:umask为022,mode为0770,则新建文件的存取许可权为0750即-rwxr-x---。(3)read:读文件函数原型:#include<>intread(intfd,void*buf,size_tnbytes) 该系统调用从文件描
实验3 进程的互斥 来自淘豆网m.daumloan.com转载请标明出处.