// testmutex.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include "windows.h"
HANDLE m_hMutex;
#include<list>
using namespace std;
list<int> vecInt;
DWORD WINAPI ThreadFunc1(LPVOID lpParam)
{
while (1)
{
// printf("线程等待锁1\n");
int a = -1;
DWORD dwRet = GetLastError();
if (0 != dwRet)
{
printf("线程结束1::%d\n",dwRet);
break;
}
WaitForSingleObject(m_hMutex, INFINITE);
if (vecInt.size()>0)
{
a = vecInt.front();
vecInt.pop_front();
printf("ThreadFunc1::%d\n", a);
}
ReleaseMutex(m_hMutex);
}
Sleep(5000);
printf("1线程结束\n");
return 0;
}
DWORD WINAPI ThreadFunc2(LPVOID lpParam)
{
while (1)
{
printf("线程等待锁2\n");
WaitForSingleObject(m_hMutex, INFINITE);
for (int i = 1; i < 20; i++)
{
vecInt.push_back(i);
}
printf("ThreadFunc2::%d\n",vecInt.size());
ReleaseMutex(m_hMutex);
Sleep(10000);
}
Sleep(5000);
printf("线程结束\n");
return 0;
}
int main(int argc, char* argv[])
{
DWORD nStatus = 0;
m_hMutex = CreateMutex(NULL, FALSE, L"cplusplus_me");
DWORD dwRet = GetLastError();
if (m_hMutex)
{
if (ERROR_ALREADY_EXISTS == dwRet)
{
printf("程序已经在运行中了,程序退出!\n");
WaitForSingleObject(m_hMutex, INFINITE);
// CloseHandle(m_hMutex);
// return 0;
}
}
//else
//{
// printf("创建互斥量错误,程序退出!\n");
// CloseHandle(m_hMutex);
// return 0;
//}
// ReleaseMutex(m_hMutex);
HANDLE handle = ::CreateThread(NULL, 0, ThreadFunc1,NULL,1024,&nStatus);
// ::CreateThread(NULL, 0, ThreadFunc2, NULL, 1024, &nStatus);
for(int i =0;i<5;i++)
{
DWORD dwRet = GetLastError();
if (0 != dwRet) break;
printf("线程等待锁2\n");
WaitForSingleObject(m_hMutex, INFINITE);
for (int i = 1; i < 20; i++)
{
vecInt.push_back(i);
}
printf("ThreadFunc2::%d\n", vecInt.size());
ReleaseMutex(m_hMutex);
Sleep(1000);
}
CloseHandle(m_hMutex);
WaitForSingleObject(handle,INFINITE);
printf("end\n");
getchar();
return 0;
}