实验3进程同步2020/3/71目录基础知识1基础知识介绍2函数介绍读者写者问题1问题描述2实验内容3实验运行效果示例实验目的实验要求2020/3/72基础知识介绍同步:并发执行的进程之间存在着不同的相互制约的关系。协调进程之间的相互制约关系,就需要实现进程之间的同步关系。所谓进程同步,是指多个相互合作的进程在一些关键点上需要相互等待或者交换信息。2020/3/73基础知识介绍临界资源:在计算机系统的各种资源中,有一些资源在同一时间只能被一个进程所使用,这种资源被称为临界资源。例如,一台打印机在同时只能被一个进程占有。一个进程的程序可以分为以下部分:进入区:在此进行进入临界区之前的各种检查。临界区:访问临界资源的代码段。退出区:将访问临界区的标志清零。剩余区:代码中的其余部分。2020/3/74基础知识介绍互斥:在操作系统中,当一个进程在临界区使用临界资源时,其它的进程必须等待,这种制约关系我们称为互斥。实现进程同步要遵循以下的原则:前进:当临界区没有进程时且其他需要进入临界区的进程,只有些不在剩余区的进程可以参加选择,以确定谁能下一个进入临界区,且这种选择不能无限延迟。互斥:当临界区内已经有进程执行时,其他的进程都不能在其临界区内执行。有限等待:从一个进程做出进入临界区的请求,直到该请求被允许,其他进程进入其临界区的次数有上限。2020/3/75基础知识介绍信号量:信号量是一个确定的二元组(S,Q),S是一个初值非负的整形变量。其值大于0时,表示系统中的一类资源数,小于0时其绝对值表示等待该资源的进程数。Q是一个初始状态为空的队列。信号量的只能由P操作(又称为Wait操作)和V操作(又称为signal操作)改变。2020/3/76基础知识介绍P,V操作:P(S)主要对信号量S完成以下的操作:S=S-1;如果(S=0),则进程继续;否则,阻塞进程,插入队列V(S)主要对信号量S完成以下的操作:s=s+1;如果(s0),继续执行,否则,从队列中移出第一个进程进入就绪队列。2020/3/77函数介绍•intpthread_mutex_lock(pthread_mutex_t*mutex)•功能:对信号量执行P操作•参数•*mutex信号量2020/3/78函数介绍•intpthread_mutex_unlock(pthread_mutex_t*mutex)•功能:对信号量执行V操作•参数•*mutex信号量2020/3/79读者写者问题问题描述有一些写者一些读者,多个读者可以同时读文件,但写者在写文件时不允许有读者在读文件,同样有读者在读文件时写者也不去能写文件。有写者在写时也不能写文件。2020/3/710读者写者问题问题分析(读者优先)写者需要保证对文件的互斥访问多个读者之间可以同步的访问文件有读者在等待访问文件时,不允许写者访问文件根据上面的分析,我们可以如下设置信号量和参数:writerLock=1互斥信号量,保证同时只有1人写accessReaderCnt=1互斥信号量,保证互斥修改读者数量readercnt整形变量,计数有几个读者2020/3/711实验内容利用多线程编程,模拟读者写者问题。创建n(n2)个线程模拟n个写者进程,创建m(m3)个线程模拟m个读者进程。在读者与写者的线程中通过对信号量的P,V操作,实现线程之间的同步关系。2020/3/712实验运行效果示例对下图的一个示例,分析如下:第一个写者在readerCnt为0(已没有读者读取前一个数据)时,写入新的数据(894429689),而后有4个读者需要读取该数据,在4个读者都读取完毕后(readerCnt为0),下一个写者才能够写入新的数据(364228444)。2020/3/713实验目的了解进程同步的特点,掌握利用信号量实现进程间同步的的方法。了解读者写者问题中进程之间的相互制约关系,能够合理的设置信号量。了解Linux系统下创建多线程的原理及使用方法,模拟读者写者问题的实现。2020/3/714实验要求按照要求编写实验,编译并执行,分析实验结果,并写出实验报告。根据实验结果,分析进程执行顺序是否正确。根据实际完成内容写实验报告,在报告中记录实验过程中遇到的问题和针对问题的解决方案。提交形式:压缩包,包含源码和实验报告。实验报告和压缩包命名都为:班号+学号+姓名+实验3。例:01+20151234+王小二+实验3。不接收命名错误的实验报告。提交至sakai。(01郭平,02石亮,03石锐,04何静媛)2020/3/715