- 1、本文档共68页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多线程编程技术的详解-第二讲
第一节:线程同步 1、当所有线程能够运行而不需要相互通信的时候,操作系统进入最佳运行状态,但很少有线程能够独立运行。 2、线程间的通讯在很多情况下我们使用全局变量或者一些get函数获得某些共享资源,在这种情况下这些全局变量或者共享资源都是跨线程的,因此不具有线程安全性。而局部变量是具有线程安全性的。 第一节:线程同步 1、需要多个线程访问一个共享的资源,同时不能破坏资源的完整性 2、一个线程需要通知其他线程某项任务已经完成了 至少在上面这两种情况下,就需要引入线程的同步技术。 第一节:线程同步 什么是线程同步 线程同步可以理解为线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作。 为什么要使用线程同步 在多线程环境中,线程之间经常要同时访问一些资源。那么势必造成访问共享资源冲突,怎么办呢,为了解决这种冲突,Win32 API提供了多种同步控制对象来帮助程序员解决共享资源访问冲突。 第一节:线程同步 同步对象分类: 用户模式下的同步对象: 例如关键段等 优点: 速度快 缺点: 不能跨进程,容易引起死锁 内核模式下的同步对象: 例如互斥量,信号量,事件等 优点: 跨进程,安全性高 缺点: 速度比用户模式下的同步对象要慢很多 第一节:线程同步 等待函数 DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds); hHandle 对象句柄。可以指定一系列的对象,如Event(事件)、Mutex(互斥)、Semaphore(信号)、Thread(线程)等 dwMilliseconds 定时时间间隔,单位为milliseconds(毫秒).如果指定一个非零值,函数处于等待状态直到hHandle标记的对象被触发,或者时间到了。如果dwMilliseconds为0,对象没有被触发信号,函数不会进入一个等待状态,它总是立即返回。如果dwMilliseconds为INFINITE,对象被触发信号后,函数才会返回 第一节:线程同步 等待函数 DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds); DWORD dw = WaitForSingleObject(hProcess,5000) { case WAIT_OBJECT_0; //the process terminated; break; case WAIT_TIMEOUT: //the process did not terminate within 5000 milliseconds; break; case WAIT_FAILED: //bad call to function(invalid handle?) break; } 第二节:Mutex互斥对象 1、用于确保一个线程独占对一个资源的访问。 2、包含一个使用计数器,线程ID,以及一个递归计数器。 3、线程的id用来标识当前占用这个互斥量的是系统中的哪个线程。 4、递归计数器标示这个线程占用该互斥量的次数。 5、互斥量是使用最为频繁的内核对象之一 第二节:Mutex互斥对象 规则: 1、如果线程ID = 0,那么该互斥量不被任何线程占用,处于触发状态 2、如果线程ID!=0 , 那么有一个线程占用了该互斥量,处于未触发状态 第二节:Mutex互斥对象 CreateMutex函数 CreateMutex函数功能是建立互斥体对象 HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes, // 指向安全属性的指针 BOOL bInitialOwner, // 初始化互斥对象的所有者 LPCTSTR lpName
文档评论(0)