线程同步 内核对象比较

临界区:一种保证在某一时刻只有一个线程能访问数据的简便办法。它只能够在同一进程内部使用。   对线程的串行化方法来访问公共资源或一段代码,速度快,适合控制数据访问。安全

主要API函数       产生临界区: InitializeCriticalSection函数

                              删除临界区: DeleteCriticalSection线程

                              进入临界区: EnterCriticalSection对象

                              退出临界区: LeaveCriticalSection进程

 

互斥对象:互斥对象跟临界区类似,但它不单单可以在同一应用程序不一样线程中实现资源的安全共享,并且能够在不一样应用程序的线程之间实现对资源的安全共享,固然下面二者也有这个特色。 只有拥有互斥对象的线程才有访问公共资源的权限。互斥对象只有一个,因此能保证公共资源不会同时被多个线程访问。事件

主要API函数        建立互斥量: CreateMutex资源

                              打开一个存在的互斥量: OpenMutex同步

                              释放互斥量的使用权:ReleaseMutexit

                              关闭互斥量:CloseHandleio

 

信号量:使用信号量(信标)最重要用途是:信号容许多个线程同时使用共享资源,它指出了同时访问共享资源的线程最大数目。

主要API函数( 函数和使用方法都与互斥对象类似)  

                            建立信号量:CreateSemaphore  传入的参数能够指定信号量的初始值。

                                       ReleaseSemaphore

 

事件:用来通知其余进程/线程某件操做已经完成。还能够实现对多个线程的优先级比较的操做。

API函数有建立,打开事件对象等

特殊点的是能够用函数SetEvent人工设置事件为有无信号状态,
所以建立事件对象时能够有两种方式,一种为自动重置,一种为人工重置。

只有人工重置方式建立的事件对象才能正确使用函数SetEvent。

 

在MFC中对于各类同步对象都提供了相对应的类CCtiticalSection,CMutex,CSemaphore ,CEvent, 另外为使用等待功能封装了两个类:CSingleLock和CMultiLock。这些类方便了使用这些同步对象

相关文章
相关标签/搜索