互斥锁std::_Mutex的使用
- 首先是来看一下没使用互斥锁的情况
// InterlockedIncrementUse.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "InterlockedIncrementUse.h"
using namespace std;
ULONG g_count = 0;
std::_Mutex g_mutex; //互斥锁
UseLock::UseLock()
{
m_dwRef = 0;
}
UseLock::~UseLock()
{
}
void WINAPI make_lock()
{
//g_mutex._Lock();
//InterlockedIncrement(&g_count);
int m = 10;
for (int i = 0 ; i <m; i++)
{
cout << i << endl;
}
//g_mutex._Unlock();
//InterlockedDecrement(&g_count);
}
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)make_lock,nullptr,0,nullptr);
CloseHandle(hThread);
HANDLE hThread_1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)make_lock,nullptr,0,nullptr);
CloseHandle(hThread_1);
system("pause");
return 0;
}
可以看出创建了两个多线程,结果如下:
可以看出 是无序的
- 看一下使用加锁的情况
// InterlockedIncrementUse.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "InterlockedIncrementUse.h"
using namespace std;
ULONG g_count = 0;
std::_Mutex g_mutex; //互斥锁
UseLock::UseLock()
{
m_dwRef = 0;
}
UseLock::~UseLock()
{
}
void WINAPI make_lock()
{
g_mutex._Lock();
//InterlockedIncrement(&g_count);
int m = 10;
for (int i = 0 ; i <m; i++)
{
cout << i << endl;
}
g_mutex._Unlock();
//InterlockedDecrement(&g_count);
}
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)make_lock,nullptr,0,nullptr);
CloseHandle(hThread);
HANDLE hThread_1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)make_lock,nullptr,0,nullptr);
CloseHandle(hThread_1);
system("pause");
return 0;
}
运行结果:
总结一下:使用_mutex方法
- 声明mutex变量
std::_Mutex g_mutex; //互斥锁声明
加锁:
g_mutex._Lock();
解锁:
g_mutex._Unlock();