병렬처리 기법중 하나로 cpu안에 있는 여러개의 코어를 이용해서 더욱더 빠른 연산을 하게하는 기법이다.
#include <iostream>
#include <thread>
#include <chrono>
#include <mutex>
using namespace std;
// 임계 영역
mutex mtx; //mutual exclusion
int main()
{
// 여러가지 일을 동시에 처리
// cout이 깨지지않게 실행시키기 위해서
// mutex를 이용해 cout을 lock시키고 다 실행되면
// unlock하는 식으로 이용한다.
auto work_func = [](const string& name)
{
for (int i = 0; i < 5; i++)
{
this_thread::sleep_for(chrono::milliseconds(100));
mtx.lock();
cout << name << " " << this_thread::get_id() << " is working" << i << endl;
mtx.unlock();
}
};
thread t1 = thread(work_func, "Jack");
thread t2 = thread(work_func, "Dash");
// t1, t2가 일다해서 값줄때 까지 main은 대기
t1.join();
t2.join();
//코어의 개수
const int num_pro = thread::hardware_concurrency();
// main함수를 돌리고있는 thread의 id 출력
cout << this_thread::get_id() << endl;
thread t3 = thread([]() {
cout << this_thread::get_id() << endl;
while (true) {}});
//t1이 끝날때까지 대기
t3.join();
return 0;
}
'CS > 네트워크' 카테고리의 다른 글
TCP와 UDP의 특징과 차이 (0) | 2022.11.04 |
---|---|
C# 원자적 연산 (Interlocked 클래스) (0) | 2022.07.26 |
C++ 원자적 연산 (atomic) (0) | 2022.07.26 |
Thread 사용법 및 생성 (0) | 2022.07.24 |
데드락 (Deadlock) 의미 & 조건 (0) | 2022.07.24 |