线程同步互斥的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 )
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/21923.html