操作系统中进程的同步与通信.ppt

  1. 1、本文档共136页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统中进程的同步与通信

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 生产者可以不断地往缓冲池送消息,如果缓冲池满,就堵塞。 而消费者始终因wait(full)操作将消费进程直接送入进程链表进行等待, 无法访问缓冲池,造成无限等待,这样就形成了死锁. * * wait(full)和wait(mutex)互换位置后,因为mutex在这儿是全局变 量,执行完wait(mutex),则mutex赋值为0,倘若full也为0,则该消费者 进程就会转入进程链表进行等待, 而生产者进程会因全局变量mutex为0而进行等待,使full始终为0, 这样就形成了死锁. * * * 同步对象等待 WaitForSingleObject在指定的时间内等待指定对象为可用状 态(signaled state); DWORD WaitForSingleObject( HANDLE hHandle, // handle of object to wait for DWORD dwMilliseconds // time-out interval in milliseconds ); WaitForMultipleObjects在指定的时间内等待多个对象为可用状态; DWORD WaitForMultipleObjects( DWORD nCount, //对象句柄数组中的句柄数; CONST HANDLE *lpHandles, // 指向对象句柄数组的指针,数组中可包括多种对象句柄; BOOL bWaitAll, // 等待标志:TRUE表示所有对象同时可用,FALSE表示至少一个对象可用 DWORD dwMilliseconds // 等待超时时限; ); 3.6.2  Windows NT的信号量 子进程对同步对象的继承 对象在创建时指定可否被子进程继承,另外还要把对象的句柄通过 命令行参数传递给子进程(才能引用该对象)。DuplicateHandle 可以将对象句柄复制给指定的另一个进程; BOOL DuplicateHandle( HANDLE hSourceProcessHandle, //被复制对象句柄所在进程的进程对象句柄; HANDLE hSourceHandle, //被复制对象句柄; HANDLE hTargetProcessHandle, //复制后对象句柄所在进程的进程对象句柄; LPHANDLE lpTargetHandle, //指向复制后对象句柄的指针; DWORD dwDesiredAccess, //复制后对象句柄的访问类型,不同类型对象的访问类型会不同; BOOL bInheritHandle,//复制后对象句柄在子进程中的继承方式; DWORD dwOptions //选项; ); 3.6.2  Windows NT的信号量 其他同步方法 Critical Section对象:只能在同一进程内使用的临 界区,同一进程内各线程对它的访问是互斥进行的。把变 量说明为CRITICAL_SECTION类型,就可作为临界区使用。 有关的API: InitializeCriticalSection对临界区对象进行初始化; EnterCriticalSection等待占用临界区的使用权,得到使用权时返回; TryEnterCriticalSection非等待方式申请临界区的使用权;申请失败时,返回0; LeaveCriticalSection释放临界区的使用权; DeleteCriticalSection释放与临界区对象相关的所有系统资源; 3.6.2  Windows NT的信号量 互锁变量访问:相当于硬件指令,对一个整数(进程内的变量或进程间的共享变量)进行操作。其目的是避免线程间切换的影响。有关的API: InterlockedExchange进行32位数据的先读后写原子操作; InterlockedCompareExchange依据比较结果进行赋值的原子操作 InterlockedExchangeAdd先加后存结果的原子操作; InterlockedDecrement先减1后存结果的原子操作; InterlockedIncrement先加1后存结果的原子操作; 3.6.2  Windows NT的信号量 有一阅览室,读者进入时必须先在一张登记表上进行登记,

文档评论(0)

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

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

1亿VIP精品文档

相关文档