清华计算机系程设小学期Thread多线程编程.pptxVIP

清华计算机系程设小学期Thread多线程编程.pptx

  1. 1、本文档共61页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
清华计算机系程设小学期Thread多线程编程

第五讲:;主要内容;并行:古老的思想!;1、什么是多任务并行;多任务的交互——竞争与协作;主要内容;2、基本概念:程序;2、基本概念:进程;2、Windows任务管理器—进程;进程的并发性;并发带来的好处;并发带来的挑战;数据的不一致性;数据的不一致性;数据的不一致性;引入多线程技术的动机;2、基本概念:线程;2、进程 vs 线程;线程内存映象和内容;2、用户级线程 vs 内核级线程;线程的实现方法;主要内容;多进程编程;进程的创建 ;进程的管理和终止;取得和设置进程的优先级;进程的终止;判断一个进程是否终止;主要内容;Win32中关于多线程 的几个函数;线程的创建 ;CreatRemoteThread函数;在线程创建函数里,参数dwCreatFlags指示线程的运行状态 若为0线程启动时立即执行 若为CREAT_SUSPENDED则线程被挂起 被挂起的线程直到其它线程调用ResumeThread()函数时,此线程才能继续执行 ;线程的挂起与重启;ExitThread 和TerminateThread;取得一个线程的优先级的函数;线程优先级设置是根据线程优先级和拥有该线程的进程优先级来设置的,最终基本优先级别在0到31之间的数值. 在线程的最终优先级中,0~15级是普通优先级 高优先级线程先运行,之后才是低级别线程 同等级别的线程按时间片轮流运行 16~30级别是实时优先级,同普通优先级不同是: 同级别的线程不按时间片轮流,而是先控制CPU的线程独占 除非它放弃控投制,否则同等级别或低级别的线程无法运行 ;线程之间的通信;对于线程和主应用程序之间的通讯可以通过消息的发送与处理来完成, 通过调用 PostMessage()或PostThreadMessage()来完成通信. 1. PostMessage的函数原型为: PostMessage(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); 2. PostThreadMessage的函数原型为: PostThreadMessage(DWORD idThread, UINT msg, WPARAM wParam, LPARAM lParam);;主要内容;多任务的交互——竞争与协作;哲学家就餐问题:永远等待;订票问题:结果不唯一;由于T1和T2是两个可同时运行的并发进程,它们在同一个计算机系统中运行,共享同一批票源数据,因此可能出现如下所示的运行情况: T1: X1 = Aj; X1 = nn( nn 0 ) T2: X2 = Aj; X2 = nn T2: X2=X2-1; Aj=X2;输出一张票; Aj= nn-1 T1: X1=X1-1; Aj=X1;输出一张票; Aj= nn-1 显然此时出现了把同一张票卖给了两个旅客的情况,两个旅客可能各自都买到一张同天同次航班的机票,可是,Aj的值实际上只减去了1,造成余票数的不正确。特别是,当某次航班只有一张余票时,就可能把这一张票同时售给了两位旅客,显然这是不能允许的。;线程的调度和同步 ;互斥锁 ;互斥锁;事件对象 ;事件对象;等待事件对象: DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds ); 参数hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔。 如果事件是有信号状态返回WAIT_OBJECT_0,如果时间超过dwMilliseconds值但事件还是无信号状态则返回WAIT_TIMEOUT。 最后,使用CloseHandle关闭创建的事件对象。;例子:使用事件对象;信号灯对象;信号灯对象;信号灯对象;信号灯使用步骤;无论Event,Mutex还是Semaphore,在执行WaitForSingleObject 时,都看当时的对象是Signal或UnSignal,从而决定是否等待 在改变Signal /UnSignal状态上,Semaphore却不同。 它提供一个计数值,允许在这个计数值之内,任何执行到WaitForSingleObject的Thread都不会停下来 每执行WaitForSingleObject一次,计数值就减一,当计数值变成0时,该Semaphore才会处于UnSignal的状态 当某个Thread执行ReleaseSemaphore时,会将计数值增加,以便其他的Thread或本身可得Signal的讯号,而使WaitForSingleObj

文档评论(0)

phltaotao + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档