多线程通信——互斥量
来源:互联网 发布:徐老师淘宝店铺号 编辑:程序博客网 时间:2024/05/29 04:33
类似于临界段,互斥量能够保证对单个资源的互斥访问,互斥量包含一个使用数量、一个线程ID、一个递归计数器。
//创建互斥量
HANDLE CreateMutex(PSECURITY_ATTRIBUTES psa,BOOL fInitialOwner, PCTSTR pszName);
//获得它自己进程与现有互斥量相关的句柄
HANDLE OpenMutex(DWORD fdwAccess,OOL fInherit, PCTSTR pszName);
//使互斥量递归计数减1,减为0的时候,恢复已通知状态
ReleaseMutex(HANDLE hMutex);
线程通过WaitForSingleObject或者WaitForMultipleObjects来等待互斥量,若线程成功的获得了互斥量,那么互斥量中的线程ID将记录该线程的ID,并递归计数加1
应用举例:
DWORD WINAPI ThreadFuncMutex1(PVOID pParam){HANDLE* pMutex = (HANDLE*)pParam;for (int i=0; i <= 10; i++){WaitForSingleObject(*pMutex, INFINITE);cout << "Thread1 output:" << i <<endl;ReleaseMutex(*pMutex);}return 0;}DWORD WINAPI ThreadFuncMutex2(PVOID pParam){HANDLE* pMutex = (HANDLE*)pParam;for (int i=0; i <= 10; i++){WaitForSingleObject(*pMutex, INFINITE);cout << "Thread2 output:" << i <<endl;ReleaseMutex(*pMutex);}return 0;}int main(){HANDLE hMutex = CreateMutex(NULL, false, L"Display Mutex");HANDLE tHandle1 = CreateThread(NULL, 0, ThreadFuncMutex1, &hMutex, 0, NULL);HANDLE tHandle2 = CreateThread(NULL, 0, ThreadFuncMutex2, &hMutex, 0, NULL);HANDLE handles[] = {tHandle1, tHandle2};WaitForMultipleObjects(2, handles, true, INFINITE);CloseHandle(hMutex); return 0;}
- 多线程通信——互斥量
- 多线程通信——事件
- 多线程通信——信号量
- 多线程——线程通信
- 多线程通信——匿名管道
- 多线程通信——互锁函数
- 多线程通信——临界段
- 多线程通信——等待函数
- ZMQ——多线程通信(过程)
- java基础——多线程之间通信
- JAVA学习——多线程通信
- C#系列——多线程通信
- 多线程(5)—线程通信
- 多线程编程浅析(2)——线程间通信
- 多线程编程浅析(2)——线程间通信
- 多线程—03—线程间通信、生产者消费者
- Socket通信实例(三)——多线程实例
- 黑马程序员——多线程之线程间的通信
- linux常见命令的列表
- ORACLE的jdbc版本
- android 手机号码归属地查询api接口
- 第二章 Shell变量及相关操作
- php array chunk
- 多线程通信——互斥量
- ES流、PES流、TS流的概念
- 上拉刷新功能
- cocos2d-x切换场景 成功案例加代码
- kindeditor文本编辑器使用
- C++中STL STD::list使用说明
- 关于 struct pollfd fdarray[] 和 struct pollfd *fdarray
- uva624 - CD(动规,01背包问题)
- ZOJ 1904 Frogger 另一种Dijkstra