版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
管程机制解决互斥与同步问题一、信号量机制解决互斥与同步问题信号量机制信号量(semaphore)机制
解决并发进程同步的工具
P操作表示同步进程发出的检测信号量操作,检测是否能够使用临界资源
V操作表示访问完临界资源的进程通知等待进程已经完成了临界资源的访问,将临界资源释放。经典互斥与同步问题回顾
生产者-消费者问题读者-写者问题哲学家进餐问题生产者-消费者问题生产者P:Wait(empty);Wait(mutex);Buffer(in)=nextp;in:=(in+1)modn;Signal(mutex);Signal(full);消费者C:Wait(full);Wait(mutex);netxc=buffer(out);out:=(out+1)modn;Signal(mutex);Signal(empty);mutex,full,empty:semaphoremutex:=1;full:=0;empty:=n;读者-写者问题(读者优先)读者R:
Wait(rmutex);rcount++;if(rcount==1)Wait(wmutex);Signal(rmutex);Read_Action();Wait(rmutex);rcount--;if(rcount==0)Signal(wmutex);Signal(rmutex);写者W:Wait(wmutex);Write_Action();Signal(wmutex);rmutex,wmutex:semaphorermutex:=1;wmutex:=1;rcount:intrcount:=0;哲学家进餐问题哲学家i(i=0,1..5)thinking();Wait(fork[i]);Wait(fork[(i+1)mod5])eating();Signal(fork[i]);Signal(fork[(i+1)mod5])arrayoffork[]:semaphorefork[]:={1,1,1,1,1};思考,怎么解决死锁问题?同步对象同步对象是指Windows/Linux中用于实现同步与互斥的实体,包括互斥量(Mutex)、信号量(Semaphore)、临界区(CriticalSection)和事件(Events)等。本实验中使用到信号量、互斥量和临界区三个同步对象。实验方案设计以读者-写者(读者优先)为例:1.创建若干线程分别模拟读者操作和写者操作2.读线程间和写线程间对各自局部共享资源的访问修改采用Mutex对象,结合WaitForSingleObject保证互斥操作。3.读线程与写线程争用全局临界资源采用临界区(CriticalSeciton)。4.统管读写线程的线程采用WaitForMultipleObjects保证等待所有的线程结束。创建线程函数退出线程函数ExitThread功能:该函数结束一个线程格式:VOIDExitThread(DWORDdwExitCode);参数说明:dwExitCode—调用线程的退出代码创建互斥量函数释放互斥量函数ReleaseMutex功能:释放互斥对象的控制权。格式:BOOLWIANPIReleaseMutex(HANDLEhMutex);参数说明:hMutex—互斥对象句柄。返回值:TRUE表示成功,FALSE表示失败。注:相当于我们的V操作创建信号量函数释放信号量函数ReleaseSemaphore功能:函数用于对指定的信号量增加指定的值。格式:BOOLReleaseSemaphore(
HANDLE
hSemaphore,LONG
lReleaseCount,LPLONG
lpPreviousCount);参数说明:hSemaphore——所要释放的信号量句柄。lReleaseCount——所要释放信号量的数目。lpPreviousCount——指向返回信号量上次值的变量的指针,如果不需要信号量上次的值,那么这个参数可以设置为NULL。注:相当于我们的V操作使用临界区资源的相关函数VOIDInltlallzeCriticalSection(LPCRITICAL_SECTIONIpCritiCalSection);函数功能:该函数初始化临界区对象。返回值:无。VOIDEnterCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);函数功能:该函数是等待指定临界区对象的所有权。当调用线程被赋予所有权时,该函数返回。返回值:无。VOIDLeaveCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);函数功能:该函数释放指定临界区对象的所有权。返回值:无。等待同步对象函数WaitForSingleObject功能:使程序处于等待状态,直到信号量hHandle出现(即其值大于等于1)或超过规定的等待时间。格式:DWORDWaitForSingleObject(HANDLEhHandle,DWORDdwMilliseconds);参数说明hHandle——同步对象指针。dwMilliseconds——等待的最长时间(INFINITE为无限等待)。注:相当于我们的P操作等待所有线程完成函数waitForMultipleObjects功能:WaiForMultipleObjects函数当下列条件之一满足时返回:(1)任意一个或全部指定对象处于信号态;(2)超时间隔已过。格式:DWORDwaitForMultipleObjects(DWORDnCount,
CONSTHANDLE*lpHandles,
BOOLfWaitAll,
IDWORDdwMilliSeconds);参数说明:nCount——句柄的数量最大值为MAXIMUM_WAIT_OBJECTS(64)HANDLE——句柄数组的指针。HANDLE类型可以为(Event,Mutex,Process,Thread,Semaphore)数组bWaitAll——等待的类型,如果为TRUE则等待所有信号量有效在往下执行,FALSE当有其中一个信号量有效时就向下执行。dwMilliseconds——超时时间超时后向执行。如果为WSA_INFINITE永不超时。如果没有信号量就会在这死等。输入数据格式及运行效果测试数据文件的例子:1R352W453R524R655W5.13提示:由于牵涉格式的问题,最好在文件中读取输入数据。Shell脚本运行过程代码实例-初始化操作代码实例-主线程代码实例-主线程代码实例-读者线程代码实例-写者线程思考试把控制读/写的全局临界资源用CriticalSection换成互斥量mutex,看看实验结果有什么变化,并且查阅相关资料说明原因。实验内容题目1:用PV信号量实现读者-写者问题(写者优先)程序。题目2:用PV信号量实现生产者与消费者问题。题目3:用PV信号量实现哲学家进餐问题,要求解决死锁问题。题目4:江安北和江安南有一座小桥,小桥中间宽两边窄,中间每次最多允许两人通过,两边每次最多允许一人通过,使用PV信号量实现过此桥的程序。实验要求1.每人做一道题2.学号末2位模4所得结果+1为该生所做题目号实验:PV信号量解决互斥与同步问题二、管程机制解决互斥与同步问题管程的定义管程的定义:一组数据结构和数据结构上的一组相关操作被称为管程。
管程(monitor):新的同步机制
用管程解决同步问题比用信号量解决同步问题更加简单。
管程机制作为同步工具,便于在高级语言编程中实现。管程的组成管程由4部分组成:管程的名称局部于管程内部的共享数据结构说明对该数据结构进行操作的一组过程对局部于管程内部的共享数据设置初始的语句管程的结构管程只有一个入口和一个出口并发进程在管程外等待调用管程中的过程如果进程在管程中不能访问临界资源,则在管程中阻塞等待访问完临界资源的进程将其唤醒
利用管程实现进程同步的工具在通过管程实现进程同步时,必须设置同步工具。
1.wait2.Signal3.condition条件变量也是一种抽象的数据结构类型,对条件变量的操作仅仅是wait和Signal。一个进程被阻塞或挂起的原因可能有多个,因此在管程中可以设置多个条件变量,形式为:Varx,y:condition对条件变量的操作:x.waitx.signal条件变量
条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。管程的关键的要素是:1.一个互斥量,让所有的线程互斥地访问管程保护的变量2.若干个条件变量,表示相应的条件,可用于阻塞线程实验内容题目1:用管程机制实现读者-写者问题(写者优先)程序。题目2:用管程机制实现读者-写者问题,读者最大数目限制为20(读者优先/写者优先均可)。题目3:用管程机制量实现哲学家进餐问题,要求解决死锁问题。题目4:江安北和江安南有一座小桥,小桥中间宽两边窄,中间每次最多允许两人通过,两边每次最多允许一人通过,使用管程机制实现过此桥的程序。创建线程函数pthread_create功能:类Unix操作系统(Unix、Linux、MacOSX等)
的创建线程的函数。格式:intpthread_create(pthread_t*tidp,
pthread_attr*attr,
void*(*start_trn)(void*),
void*arg);参数说明:tidp——指向线程标识符的指针。attr——设置线程属性。start_trn——线程运行函数的起始地址。arg——运行函数的参数。返回值:若线程创建成功,则返回0。若线程创建失败,则返回出错编号。召回线程函数pthread_join功能:等待一个线程的结束。格式:intpthread_join(pthread_tthread,void**retval);参数说明:thread——线程标识符,即线程ID。retval——用户定义的指针,用来存储被等待线程的返回值。返回值:0代表成功。失败,返回的则是错误号。说明:pthread_join()函数,以阻塞的方式等待thread指定的 线程结束。当函数返回时,被等待线程的资源被收回。 如果进程已经结束,那么该函数会立即返回。锁定互斥量函数pthread_mutex_lock功能:给互斥量加锁。格式:intpthread_mutex_lock(pthread_mutex_t*mutex);参数说明:mutex——互斥信号量指针。返回值:在成功完成之后会返回零。其他任何返回值都表示出现了错误。说明:当pthread_mutex_lock()返回时,该互斥锁已被锁定。线程调用该函数让互斥锁上锁,如果该互斥锁已被另一个线程锁定和拥有,则调用该线程将阻塞,直到该互斥锁变为可用为止。类似于我们的P操作。释放互斥量函数pthread_mutex_unlock功能:给互斥量解锁。格式:intpthread_mutex_trylock(pthread_mutex_t*mutex);参数说明:mutex——需要解锁的互斥信号量指针。返回值:在成功完成之后会返回零。其他任何返回值都表示出现了错误。说明:释放互斥锁,与pthread_mutex_lock成对存在。 类似于我们的V操作。等待信号量函数sem_wait功能:可以获得资源,使semaphore的值减1。如果调用sem_wait()时semaphore的值已经是0,则挂起等待。格式:intsem_wait(sem_t*sem);参数说明:sem——信号量资源指针。返回值:在成功完成之后会返回零。其他任何返回值都表示出现了错误。说明:所需头文件:<semaphore.h>。 类似于我们的P操作。释放信号量函数sem_destroy功能:释放资源,使semaphore的值加1,同时唤醒挂起等待的线程。格式:intsem_destroy(sem_t*sem);参数说明:sem——信号量资源指针。返回值:在成功完成之后会返回零。其他任何返回值都表示出现了错误。说明:所需头文件:<semaphore.h>。 类似于我们的P操作。等待条件变量函数pthread_cond_wait功能:等待条件变量,若相应的条件变量已被占用则阻塞线程等待,直到有其他线程释放该条件变量。格式:intpthread_cond_wait(pthread_cond_t*cond,pthread_mutex_t*mutex);参数说明:cond——条件变量指针。mutex——互斥信号量指针。返回值:成功则返回0,失败则返回出错编号。释放条件变量函数pthread_cond_signal功能:释放条件变量,唤醒一个等待在指定条件变量上的线程。格式:intpthread_cond_signal(pthread_cond_t*cond)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年北京市政府采购中心(公共资源交易中心)人员招聘考试备考试题及答案详解
- 2026福建南平市建阳区童游街道社区卫生服务中心招聘编外人员1人考试参考题库及答案解析
- 2026年昌吉市劳动保障监查系统事业单位人员招聘考试备考试题及答案详解
- 很全面员工安全手册
- 2026年阿拉善市信访系统事业单位人员招聘考试备考试题及答案详解
- 2026湖南岳阳市屈原管理区事业单位四海揽才招聘11人考试备考题库及答案解析
- 2026年澄迈县中医院医护人员招聘笔试模拟试题及答案解析
- 2026青海西宁大通县中医院招聘消防控制室操作员2人笔试备考题库及答案解析
- 2026年成都市事业单位人员招聘考试备考试题及答案详解
- 2026年昌吉市社区工作者招聘考试备考试题及答案详解
- 剪力墙住宅楼施工组织设计
- 委托生产协议书
- 驻校教官管理宿舍制度
- 美术概论-课件
- 2024年中国财经出版传媒集团招聘笔试参考题库含答案解析
- 糖尿病视网膜病变健康宣教
- 螺旋箍筋重量计算公式
- BH550综合巡检分析诊断仪中文说明书
- 中级微观经济学第十五讲交换
- 临床医学检验临床免疫正高题库
- 病理科技师试题及答案
评论
0/150
提交评论