线程间实现同步互斥的方法

线程间实现同步互斥的方法

ID:14135097

大小:56.00 KB

页数:11页

时间:2018-07-26

线程间实现同步互斥的方法_第1页
线程间实现同步互斥的方法_第2页
线程间实现同步互斥的方法_第3页
线程间实现同步互斥的方法_第4页
线程间实现同步互斥的方法_第5页
资源描述:

《线程间实现同步互斥的方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、最近关注了几个其他线程间同步的方法,之前用的比较简单了,使用全局变量置标志,在线程中根据标志实现相应操作,搜索了一下,还有些其他方法,自己做了Demo,在此总结一下:1.临界区(CriticalSection):适合一个进程内的多线程访问公共区域或代码段时使用。 API: VOID EnterCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);   //进入临界区 VOID LeaveCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);  

2、//离开临界区 某一线程调用EnterCriticalSection函数进入临界区后,必须保证最后可以调用LeaveCriticalSection,否则公共区域无法释放,并被其它线程访问。  在MFC中封装了CCriticalSection类,该类提供进入临界区和离开临界区的函数Lock()和Unlock() Ex:  CCriticalSection cs;  //临界区对象 void ThreadFunction() {      cs.Lock();      //代码     cs.Unlock();          }//endThr

3、eadFunction 2.互斥量(Mutex):适合不同进程内多线程访问公共区域或代码段时使用,与临界区相似。 HANDLECreateMutex(LPSECURITY_ATTRIBUTESlpMutexAttributes,BOOLbInitialOwner,LPCTSTRlpName);  //创建一个互斥量,返回值为这个互斥量的句柄。参数bInitialOwner表示是否由调用此函数的进程拥有此互斥量 API:   HANDLEOpenMutex(DWORDdwDesiredAccess,BOOLhInheritHandle,LPCTST

4、RlpName);//打开一个已创建的互斥量  BOOLReleaseMutex(HANDLEhMutex);  //释放  MFC中封装了CMutex类,同样的函数Lock()和Unlock()3.事件(Event):通过线程间触发事件实现同步互斥 API:    HANDLECreateEvent(LPSECURITY_ATTRIBUTESlpEventAttributes,BOOLbManualReset,BOOLbInitialState,LPCTSTRlpName); //创建一个事件,返回值为事件句柄参数bManualReset表示是

5、否通过手动重设事件,参数为TRUE,则需要调用ResetEvent重设事件,否则为自动重设 HANDLEOpenEvent(DWORDdwDesizedAccess,BOOLbInheritHandle,LPCTSTRlpName);//打开事件 在MFC中封装了CEvent类,包括SetEvent()触发事件、PulseEvent暂停事件、ResetEvent()重设事件及Unlock()释放事件句柄4.信号量(Semaphore):与临界区和互斥量不同,可以实现多个线程同时访问公共区域数据,原理与操作系统中PV操作类似,先设置一个访问公共区域

6、的线程最大连接数,每有一个线程访问共享区资源数就减一,直到资源数小于等于零。API: HANDLECreateSemaphore(LPSECURITY_ATTRIBUTES,LONGlInitialCount,LONGlMaxmemCount,LPCTSTRlpName);//创建信号量,返回句柄,参数lInitialCount为信号量资源初始数基数,参数lMaxmemCount为该信号量的最大数HANDLEOpenSemaphore(DWORDdwDesiredAccess,BOOLhInheriHandle,LPCTSTRlpName);//

7、打开信号量BOOLReleaseSemaphore(HANDLEbSemaphore,LONGlReleaseCount,LPLONGlpPreviousCount);//释放信号量在MFC中封装了CSemaphore类,声明该类的对象后使用API:WaitForSingleObject()函数实现等待访问资源,使用ReleaseSemaphore函数释放资源,函数参数中需串入信号量对象句柄。总结:上述4个实现线程同步互斥的类均派生自虚基类CSyncObject,除临界区外其它3中方式均可用于多进程间线程同步互斥。另:线程触发自定义事件可使用AP

8、I函数PostThreadMessage()函数,或创建CWinThread对象,调用该类的PostThreadMessage()互斥锁

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。