一:介绍
互斥对象是系统内核维护的一种数据结构,保证了对象对单个线程的访问权。
二:函数说明
创建互斥对象:
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes, 安全属性结构指针,可为NULL,表示默认安全性
BOOL bInitialOwner, //是否占有该互斥量,TRUE:占有,FALSE:不占有
LPCTSTR lpName //设置互斥对象的名字
);
获得互斥对象:
DWORD WaitForSingleObject(
HANDLE hHandle, //互斥对象的句柄
DWORD dwMilliseconds //0:测试对象的状态立即返回;INFINITE:对象被触发信号后,函数才会返回
}
释放互斥对象:
BOOL ReleaseMutex(HANDLE hHandle)
三:步骤
- 声明互斥对象:HANDLE hMutex
- 创建互斥对象:hMutex = CreateMutex(NULL, FALSE, NULL)
- 使用互斥对象:WaitForSingleObject(hMutex, INFINITE)
- 释放互斥对象:ReleaseMutex(hMutex)
四:代码实现
1 /******************************************************** 2 Copyright (C), 2016-2018, 3 FileName: t13 4 Author: woniu201 5 Email: wangpengfei.201@163.com 6 Created: 2018/10/23 7 Description: 线程同步-互斥对象 8 ********************************************************/ 9 #include <iostream> 10 #include <Windows.h> 11 12 using namespace std; 13 14 volatile int number = 1; 15 HANDLE hMutex; 16 17 DWORD CALLBACK ThreadFun1(LPVOID pParam) 18 { 19 while (1) 20 { 21 WaitForSingleObject(hMutex, INFINITE); 22 cout << "Thread1:" << number++ << endl; 23 ReleaseMutex(hMutex); 24 if (number >= 1000) 25 { 26 break; 27 } 28 29 } 30 return 0; 31 } 32 33 DWORD CALLBACK ThreadFun2(LPVOID pParam) 34 { 35 while (1) 36 { 37 WaitForSingleObject(hMutex, INFINITE); 38 cout << "Thread2:" << number++ << endl; 39 ReleaseMutex(hMutex); 40 if (number >= 1000) 41 { 42 break; 43 } 44 } 45 return 0; 46 } 47 48 49 int main() 50 { 51 hMutex = CreateMutex(NULL, FALSE, NULL); 52 53 CreateThread(NULL, 0, ThreadFun1, NULL, 0, NULL); 54 CreateThread(NULL, 0, ThreadFun2, NULL, 0, NULL); 55 56 getchar(); 57 return 1; 58 }
扫码关注公众号
专注分享Java,C/C++,STL,Spring框架,mybatis框架,mysql,redis,分布式,高并发,设计模式,爬虫,docker,shell编程等相关技术,在这里一起探讨,一起学习,一起进步,不定期分享视频书籍资源,充分利用碎片化时间,让我们的技术之路更加有乐趣。