网站大量收购独家精品文档,联系QQ:2885784924

第2章单机资源共享及应用编程.ppt

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

信号量(Semaphore) 信号量(Semaphore)内核对象对线程的同步方式与前面几种方法不同,它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目,以第二章代码“信号量”为例。 信号量锁住同类一定数量的资源 信号量的使用特点使其更适用于对Socket(套接字)程序中线程的同步。例如,网络上的HTTP服务器要对同一时间内访问同一页面的用户数加以限制,这时可以为没一个用户对服务器的页面请求设置一个线程,而页面则是待保护的共享资源,通过使用信号量对线程的同步作用可以确保在任一时刻无论有多少用户对某一页面进行访问,只有不大于设定的最大用户数目的线程能够进行访问,而其他的访问企图则被挂起,只有在有用户退出对此页面的访问后才有可能进入。 信号量相关函数 产生信号量,调用函数HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCTSTR lpName ); 获得信号量,可以使用Win32的Wait…函数。 释放信号量,调用函数BOOL ReleaseSemaphore( HANDLE hSemaphore, LONG lReleaseCount, LPLONG lpPreviousCount ); 关闭信号量,可以使用Closehandle()函数 事件对象(Event Object) 事件(Event)为一最具有弹性的核心对象,是WIN32提供的最灵活的线程间同步方式,事件可以处于激发状态(signaled or true)或未激发状态(unsignal or false) ),这两种状态全由程序控制,不会成为Wait…函数的副作用。它是用来通知其他进程/线程某个操作已经完成。根据状态变迁方式的不同,事件可分为两类: (1)手动设置:这种对象只可能用程序手动设置,在需要该事件或者事件发生时,采用SetEvent及ResetEvent来进行设置。当有多个线程都在等待一个线程运行结束,我们就可以使用人工重置事件,在被等待的线程结束时设置该事件为有信号状态,这样其他的多个线程对该事件的等待都会成功,因为该事件的状态不会被自动重置。 (2)自动恢复:一旦事件发生并被处理后,自动恢复到没有事件状态,不需要再次设置。使用这种方式,则等待的线程总只有一个等待成功,因为任何一个线程等待成功,事件会自动恢复到无信号状态,从而阻塞其他等待线程。 事件对象相关函数 HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPTSTR lpName); 产生事件对象 利用Win32的Wait…函数传递事件信息。 设为激发态,BOOL SetEvent( HANDLE hEvent ); 设为非激发态, BOOL ResetEvent( HANDLE hEvent ); BOOL PulseEvent( HANDLE hEvent ); 如果为人工设置,把事件设为激发态唤醒所有等待线程,然后把事件恢复为非激发态。如果为自动设置,把事件设为激发态,然后事件恢复为非激发态 HANDLE OpenEvent( DWORD dwDesiredAccess, BOOL bInheritHandle, LPCTSTR lpName ); 打开一个现有命名的对象 互锁变量(Interlocked Variable) 互锁变量函数是使用的比较多的线程同步方法,互锁函数的家族十分的庞大,有兴趣的读者可以查查MSDN,以InterLocked开始的函数都是户数函数。使用互锁函数的优点是:他的速度要比其他的CriticalSection, Mutex, Event, Semaphore快很多。 同步机制最简单类型,对标准的32位变量操作 互锁变量相关函数 LONG InterlockedIncrement( LPLONG lpAddend ); 和LONG InterlockedDecrement( LPLONG lpAddend ); 变量经过运算(加1或减1运算)后,等于0,传回0;大于0传回正值;小于0,传回负值。引用计数处理。 LONG InterlockedExchange( LPLONG Target, LONG Value ); 设定一个新值传回旧值。 LONG InterlockedCompareExchange( LONG volatile* Destination, LONG Exchange, LONG

文档评论(0)

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

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

1亿VIP精品文档

相关文档