본문 바로가기

연습 노트

C++ Windows 멀티스레딩

Windows 환경에서 멀티스레딩을 연습한 코드입니다. 개인적으로는 나중에 또 쓰일 것 같아서 작성하였습니다. 저는 코딩은 그다지 잘하지 않습니다만 그래도 방문하신 분들께서 코딩하실 때 약간이라도 도움이 될까해서 공유합니다.

#include <Windows.h>
#include <process.h>
#include <mutex>

#include <iostream>

static std::mutex coutMutex;

typedef struct MyData {
	int a1;
	int a2;
} MyData, *PMyData;

unsigned __stdcall myThreadFunc(void* lpParam) {
	MyData* param = (MyData*)lpParam;
	
	{
		std::lock_guard<std::mutex> lock(coutMutex);
		std::cout << param->a1 << " + " << param->a2 << " = " << param->a1 + param->a2 << std::endl;
	}
	
	return 0;
}

int main() {
	const size_t MAX_THREADS = 6;

	PMyData paramArray[MAX_THREADS];
	HANDLE myThreadArray[MAX_THREADS];
	unsigned int myThreadIDArray[MAX_THREADS];

	for (int i = 0; i < MAX_THREADS; i++) {
		paramArray[i] = new MyData();
		paramArray[i]->a1 = i;
		paramArray[i]->a2 = i * i + 3 * i;
	
		myThreadArray[i] = (HANDLE) _beginthreadex(
			NULL,
			0,
			myThreadFunc,
			paramArray[i],
			0,
			&myThreadIDArray[i]
		);

	}

	WaitForMultipleObjects(MAX_THREADS, myThreadArray, TRUE, INFINITE);
			
	for (int i = 0; i < MAX_THREADS; i++) {
		std::cout << myThreadIDArray[i] << std::endl;
		CloseHandle(myThreadArray[i]);
		delete(paramArray[i]);
	}

	getchar();
	return 0;
}