题目2用管程机制实现读者-写者问题.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
互斥与同步 操作系统实验2 赵静:1215052241@ 内容 一、信号量机制解决互斥与同步问题 实验:P/V信号量的编程实现 二、管程机制解决互斥与同步问题 实验:管程机制的编程实现 一、信号量机制解决互斥与同步问题 信号量机制 信号量(semaphore)机制 解决并发进程同步的工具 P操作表示同步进程发出的检测信号量操作,检测是否能够使用临界资源 V操作表示访问完临界资源的进程通知等待进程已经完成了临界资源的访问,将临界资源释放。 经典互斥与同步问题回顾 生产者-消费者问题 读者-写者问题 哲学家进餐问题 生产者-消费者问题 生产者P: Wait(empty); Wait(mutex); Buffer(in)=nextp; in:=(in+1) mod n; Signal(mutex); Signal(full); 消费者C: Wait(full); Wait(mutex); netxc=buffer(out); out:=(out+1) mod n; Signal(mutex); Signal(empty); mutex,full,empty:semaphore mutex :=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:semaphore rmutex :=1;wmutex :=1; rcount:int rcount:=0; 哲学家进餐问题 哲学家i(i=0,1..5) thinking(); Wait(fork[i]); Wait(fork[(i+1) mod 5]) eating(); Signal(fork[i]); Signal(fork[(i+1) mod 5]) array of fork[]:semaphore fork[] :={1,1,1,1,1}; 思考,怎么解决 死锁问题 ? 同步对象 同步对象是指Windows/Linux中用于实现同步与互斥的实体, 包括互斥量(Mutex)、信号量(Semaphore)、临界区(Critical Section)和事件(Events)等。 本实验中使用到信号量、互斥量和临界区三个同步对象。 实验方案设计 以读者-写者(读者优先)为例: 1.创建若干线程分别模拟读者操作和写者操作 2.读线程间和写线程间对各自局部共享资源的访问修改采用 Mutex对象,结合WaitForSingleObject 保证互斥操作。 3.读线程与写线程争用全局临界资源采用临界区(Critical Seciton)。 4.统管读写线程的线程采用WaitForMultipleObjects 保证等待所有的线程结束。 创建线程函数 CreateThread 功能:该函数创建一个在调用进程的地址空间中执行的线程。 若函数调用成功,返回值为新线程的句柄;若函数调用失败, 返回值为NULL。 格式: HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlag, LPDWORD lpThreadId); 参数说明: lpThreadAttributes—指向一个LPSECURITY_ATTRIBUTES(新线程的安全性描述符)。 dwStackSize—定义原始堆栈大小。 lpStartAddress—指向使用LPTHRAED_START_ROUTINE类型定义的函数。 lpParamiter—定义一个给进程传递参数的指针。 dwCreationFlags—定义控制线程创建的附加标志。 lpThread—保存线程标志符(32位) 退出线程函数 ExitThread 功能:该函数结束一个线程 格式:VOID ExitThread (DWORD dwExitCode); 参数说明: dwExitCode—调用线程的退出代码 创建互斥量函数 CreateMutex

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档