#include "stdafx.h"
#include<process.h>
#include<iostream>
#include<windows.h>
HANDLE g_hMutex = NULL;
const int g_Number = 3;
DWORD WINAPI ThreadProc1(LPVOID lpParam);
DWORD WINAPI ThreadProc2(LPVOID lpParam);
DWORD WINAPI ThreadProc3(LPVOID lpParam);
int g_value = 0;
int _tmain(int argc, _TCHAR* argv[])
{
g_hMutex = CreateMutex(NULL,false,NULL);
//true表示主线程拥有互斥对象,但是主线程没有释放该对象,互斥对象谁拥有 谁释放
//false表示当前没有线程拥有这个互斥对象
HANDLE hThread[g_Number] = {0};
int first = 1, second = 2, third = 3;
hThread[0] = (HANDLE)_beginthreadex(NULL,0,(unsigned int(_stdcall*)(void*))&ThreadProc1,(LPVOID)first,0,NULL);
hThread[1] = (HANDLE)_beginthreadex(NULL, 0, (unsigned int(_stdcall*)(void*))&ThreadProc2, (LPVOID)second, 0, NULL);
hThread[2] = (HANDLE)_beginthreadex(NULL, 0, (unsigned int(_stdcall*)(void*))&ThreadProc3, (LPVOID)third, 0, NULL);
WaitForMultipleObjects(g_Number,hThread,TRUE,INFINITE); // 等待的类型, 如果为 TRUE ,表示除非对象都发出信号,否则就一直等待下去;如果 FALSE ,表示任何对象发出信号即可
CloseHandle(hThread[0]);
CloseHandle(hThread[1]);
CloseHandle(hThread[2]);
CloseHandle(g_hMutex);
return 0;
}
DWORD WINAPI ThreadProc1(LPVOID lpParam)
{
for (int i = 0; i < 10; i++)
{
WaitForSingleObject(g_hMutex, INFINITE);//等待互斥量
if (g_value < 5)
std::cout << "线程1:"<<g_value++ << std::endl;
ReleaseMutex(g_hMutex);
}
return 0;
}
DWORD WINAPI ThreadProc2(LPVOID lpParam)
{
for (int i = 0; i < 10; i++)
{
WaitForSingleObject(g_hMutex, INFINITE);//等待互斥量
if (g_value >= 5)
std::cout << "线程2:" << g_value++ << std::endl;
ReleaseMutex(g_hMutex);
}
return 0;
}
DWORD WINAPI ThreadProc3(LPVOID lpParam)
{
for (int i = 0; i < 10; i++)
{
WaitForSingleObject(g_hMutex, INFINITE);//等待互斥量
if (g_value > 5)
std::cout << "线程3:" << g_value-- << std::endl;
ReleaseMutex(g_hMutex);
}
return 0;
}
#include<process.h>
#include<iostream>
#include<windows.h>
HANDLE g_hMutex = NULL;
const int g_Number = 3;
DWORD WINAPI ThreadProc1(LPVOID lpParam);
DWORD WINAPI ThreadProc2(LPVOID lpParam);
DWORD WINAPI ThreadProc3(LPVOID lpParam);
int g_value = 0;
int _tmain(int argc, _TCHAR* argv[])
{
g_hMutex = CreateMutex(NULL,false,NULL);
//true表示主线程拥有互斥对象,但是主线程没有释放该对象,互斥对象谁拥有 谁释放
//false表示当前没有线程拥有这个互斥对象
HANDLE hThread[g_Number] = {0};
int first = 1, second = 2, third = 3;
hThread[0] = (HANDLE)_beginthreadex(NULL,0,(unsigned int(_stdcall*)(void*))&ThreadProc1,(LPVOID)first,0,NULL);
hThread[1] = (HANDLE)_beginthreadex(NULL, 0, (unsigned int(_stdcall*)(void*))&ThreadProc2, (LPVOID)second, 0, NULL);
hThread[2] = (HANDLE)_beginthreadex(NULL, 0, (unsigned int(_stdcall*)(void*))&ThreadProc3, (LPVOID)third, 0, NULL);
WaitForMultipleObjects(g_Number,hThread,TRUE,INFINITE); // 等待的类型, 如果为 TRUE ,表示除非对象都发出信号,否则就一直等待下去;如果 FALSE ,表示任何对象发出信号即可
CloseHandle(hThread[0]);
CloseHandle(hThread[1]);
CloseHandle(hThread[2]);
CloseHandle(g_hMutex);
return 0;
}
DWORD WINAPI ThreadProc1(LPVOID lpParam)
{
for (int i = 0; i < 10; i++)
{
WaitForSingleObject(g_hMutex, INFINITE);//等待互斥量
if (g_value < 5)
std::cout << "线程1:"<<g_value++ << std::endl;
ReleaseMutex(g_hMutex);
}
return 0;
}
DWORD WINAPI ThreadProc2(LPVOID lpParam)
{
for (int i = 0; i < 10; i++)
{
WaitForSingleObject(g_hMutex, INFINITE);//等待互斥量
if (g_value >= 5)
std::cout << "线程2:" << g_value++ << std::endl;
ReleaseMutex(g_hMutex);
}
return 0;
}
DWORD WINAPI ThreadProc3(LPVOID lpParam)
{
for (int i = 0; i < 10; i++)
{
WaitForSingleObject(g_hMutex, INFINITE);//等待互斥量
if (g_value > 5)
std::cout << "线程3:" << g_value-- << std::endl;
ReleaseMutex(g_hMutex);
}
return 0;
}