线程同步互斥的4种方式

1.临界区(Critical Section):适合一个进程内的多线程访问公共区域或代码段时使用,防止多个线程同时访问一个变量或者代码段。

2.互斥量(Mutex):适合不同进程内多线程访问公共区域或者代码段时使用,可以一进程内多线程使用,也可以多个进程多线程使用。

3.事件(EVENT):通过线程间触发事件实现同步互斥,适用于后一线程需要等待前一个线程数据输出使用

4.信号量(Semaphore):与临界区和互斥量不同,可以实现多个线程同时访问公共区域数据,原理与操作系统中的PV操作类似,先设置一个访问公共区域的线程最大连接数,每一个线程访问共享区资源数就减一,直到资源数小于等于零。

 

下面为同步互斥使用流程

互斥:

关键段CS :

创建或初始化   InitializeCriticalSection(PCRITICAL_SECTION  lpCriticalSection)

销毁                  DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection)

进入关键区域    EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection)

离开关键区域    LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection)

互斥量Mutex:

创建或初始化   CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes,

                                                BOOL bInitialOwner,     

                                                LPCTSTR lpName)

销毁                  CloseHandle (HANDLE hMutex)

进入互斥区域    WaitForSingleObject(HANDLE hMutex, INFINITE)

离开互斥区域    ReleaseMutex(HANDLE hMutex)

 

同步:

事件Event

创建                   CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes,

                                                BOOL bManualReset,

                                                BOOL bInitialState,

                                                LPCTSTR lpName)

销毁                   CloseHandle(HANDLE hEvent)

使事件触发        SetEvent(HANDLE hEvent)

使事件未触发    ResetEvent(HANDLE hEvent)

信号量Semaphore

创建                    CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,

                                                           LONG lInitialCount,

                                                           LONG lMaximumCount,

                                                           LPCTSTR lpName)

销毁                    CloseHandle(ANDLE hSemaphore)

递减计数             WaitForSingleObject(HANDLE hSemaphore, INFINITE)

递增计数             ReleaseSemaphore(HANDLE hSemaphore,

                                                             LONG lReleaseCount,  

                                                             LPLONG lpPreviousCount )

 

posted @ 2020-05-11 22:05  文泰来  阅读(1351)  评论(0)    收藏  举报