- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
处理机管理(中)
进程和进程控制
线程
进程互斥和同步
死锁问题
进程间通信
处理器调度;进程互斥和同步;进程间临界资源访问冲突
共享变量的修改冲突
操作顺序冲突;共享变量的修改冲突;3个进程:get, process和print;临界资源的访问过程;同步机制应遵循的准则;进程互斥和同步;进程互斥的软件方法;算法2:双标志、先检查;算法3:双标志、后检查;算法4:先修改、后检查、后修改者等待;信号量(semaphore);信号量和P、V原语;P原语;V原语;利用信号量实现互斥;利用信号量可以实现进程间的同步;经典进程同步问题;采用信号量机制:
full是“满”数目,初值为0,empty是“空”数目,初值为n。full和empty存在关系:full + empty == n
mutex用于访问缓冲区时的互斥,初值是1
每个进程中各个P操作的次序是重要的:先检查资源数目,再检查是否互斥――否则可能死锁(为什么?);2. 读者-写者问题(the readers-writers problem);???用信号量机制:
Wmutex表示允许写,初值是1。
公共变量Rcount表示“正在读”的进程数,初值是0;
Rmutex表示对Rcount的互斥操作,初值是1。;信号量同步的缺点;管程的引入;管程的主要特性;管程作为一个模块,它的结构定义如下:????monitor_name=MONITOR; ?????? 共享变量说明; ?????? define 本管程内部定义、外部可调用的函数名表; ?????? use 本管程外部定义、内部可调用的函数名表; ?????? 内部定义的函数说明和函数体 ?????? { ???????? 共享变量初始化语句; ?????? } ;进程互斥和同步;进程互斥和同步;Mutex对象:互斥对象,相当于互斥信号量,在一个时刻只能被一个线程使用。有关的API:
CreateMutex创建或打开一个互斥对象,返回对象句柄;
OpenMutex返回一个已存在的互斥对象的句柄,用于后续访问;
ReleaseMutex释放对互斥对象的占用,使之成为可用;;Semaphore对象:相当于资源信号量,取值在0到指定最大值之间,用于限制并发访问的线程数。有关的API:
CreateSemaphore创建一个信号量对象,指定最大值和初值,返回对象句柄;
OpenSemaphore返回一个已存在的信号量对象的句柄,用于后续访问;
ReleaseSemaphore释放对信号量对象的占用;;Event对象:事件对象,相当于触发器,可通知一个或多个线程某事件的出现。有关的API:
CreateEvent创建一个事件对象,返回对象句柄;
OpenEvent返回一个已存在的事件对象的句柄,用于后续访问;
SetEvent和PulseEvent设置指定事件对象为有信号状态;
ResetEvent设置指定事件对象为无信号状态(nonsignaled);同步对象等待;
(2) WaitForMultipleObjects在指定的时间内等待多个对象为有信号状态;
DWORD WaitForMultipleObjects(
DWORD nCount, //对象句柄数组中的句柄数;
CONST HANDLE *lpHandles, // 指向对象句柄数组的指针,数组中 //可包括多种对象句柄;
BOOL bWaitAll, // 等待标志:TRUE表示所有对象同时可用 //FALSE表示至少一个对象可用;
DWORD dwMilliseconds // 等待超时时限;
); ;其他同步方法;互锁变量访问
相当于硬件指令,对一个整数(进程内的变量或进程间的共享变量)进行操作。其目的是避免线程间切换的影响。有关的API:
InterlockedExchange 进行32位数据的先读后写原子操作;
InterlockedCompareExchange 依据比较结果进行赋值的原子操作;
InterlockedExchangeAdd 先加后存结果的原子操作;
InterlockedDecrement 先减1后存结果的原子操作;
InterlockedIncrement 先加1后存结果的原子操作;;死锁问题(DEADLOCK);概述;可重用资源死锁;可消耗资源(consumable resource):可以动态生成和消耗,一般不限制数量。如硬件中断、信号、消息、缓冲区内的数据。;死锁发生条件:;死锁的预防;死锁的检测;死锁的避免;银行家算法规定顾客分成若干次进行借款,要求在第一次借款时,能说明他的最大借款额。
具体算法:
顾客的借款操作依次顺序进行,直到全部操作完成;
银行家对
文档评论(0)