线程同步(windows平台):互斥对象
Posted woniu201
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程同步(windows平台):互斥对象相关的知识,希望对你有一定的参考价值。
一:介绍
互斥对象是系统内核维护的一种数据结构,保证了对象对单个线程的访问权。
二:函数说明
创建互斥对象:
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: [email protected] 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 }
以上是关于线程同步(windows平台):互斥对象的主要内容,如果未能解决你的问题,请参考以下文章