728x90
반응형
main_다수의 쓰레드를 만들어보자(안정화된 함수를 사용하기도 하고).cpp
#include "MySystemError.h"
#define MAX 100000
#define MAXTHREAD 100
int total = 0; //전역변수
DWORD WINAPI ThreadFunc(LPVOID IpParameter);
HANDLE hMutex;
int _tmain(void)
{
hMutex = CreateMutex(NULL, FALSE, NULL);
if (!hMutex) SystemErrorMsg(_T("CreateMutex"));
else SystemOKMsg(_T("CreateMutex"));
BOOL result = FALSE;
_tsetlocale(LC_ALL, _T("korean"));
HANDLE hThread[MAXTHREAD];
for (int i = 0; i < MAXTHREAD; i++)
{
hThread[i] = CreateThread(NULL, 0, ThreadFunc, NULL, CREATE_ALWAYS, NULL);
if (!hThread[i]) SystemErrorExit(_T("CreateThread"));
else SystemOKMsg(_T("CreateThread"));
}
result = WaitForMultipleObjects(MAXTHREAD, hThread, TRUE, INFINITE);
if (result == WAIT_FAILED)
SystemErrorMsg(_T("WaitForMultipleObjects"));
else SystemOKMsg(_T("WaitForMultipleObjects"));
for (int i = 0; i < MAXTHREAD; i++)
{
result = CloseHandle(hThread[i]);
if (!result) SystemErrorExit(_T("CloseHandle"));
else SystemOKMsg(_T("CloseHandle"));
}
result = CloseHandle(hMutex);
if (!result) SystemErrorExit(_T("CloseHandle-hMutex"));
else SystemOKMsg(_T("CloseHandle-hMutex"));
_tprintf(_T("hahahhah~~~\n"));
_tprintf(_T("total=%d\n"), total);
return 0;
}
//내가 처리해야 하는 데이터들을 처리하는 곳
//-> 다른 사람이 작업중이므로 기다려야 하는데 그동안 여기에 있음
DWORD WINAPI ThreadFunc(LPVOID IpParameter)
{
BOOL result = FALSE;
WaitForSingleObject(hMutex, INFINITE);
for (int i = 0; i < MAX; i++)
total++;
ReleaseMutex(hMutex);
//_tprintf(_T("%d쓰레드는 %d입니다. \n"), GetCurrentThreadId(), totals++);
return 0;
}
728x90
반응형