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;
}
'연습 노트' 카테고리의 다른 글
형독 카트라이더 디비디비딥 최적(?)의 위치 선정 (0) | 2022.08.20 |
---|---|
이분 매칭에 관한 몇 가지 반례들 (5) | 2022.07.16 |
알고리즘 덕후의 「투 더 문」 퍼즐 푸는 방법 (2) | 2021.08.31 |
표류 중인 어부 문제 (Lost Fisherman Problem) (0) | 2020.05.16 |