c++11 thread, condition_variable and async 개념정리
카테고리
개요
c++11 의 thread, condition_variable(이하 cv), async 뭐 이런 것들 공부하다가 머릿속이 꼬였습니다. cv와 async를 비교하고 있더라구요. 그래서 개념을 명확하게 하고 헷갈리는 부분을 정리해봤습니다.
condition_variable
먼저 condition_variable(이하 cv) 에 대해서 명확하게 의미를 정의하고 넘어가야겠네요.
The condition_variable class is a synchronization primitive that can be used to block a thread, or multiple threads at the same time, until another thread both modifies a shared variable (the condition), and notifies the condition_variable.
출처 : cppreference.com std::condition_variable
cv는 동기화의 기본 요소이다. 쉽게 말해서 맘대로 돌고있는 둘 이상의 쓰레드에 대해 서로 동기화 시켜줄 수 있는 방법이라는거죠. async와 비교해야할 대상이 아니었습니다.
async
The function template async runs the function f asynchronously
출처 : cppreference.com std::condition_variable
function f를 비동기적으로 실행시켜주는 함수 템플릿이다. async를 통해 task를 생성하여 비동기적으로 multi-threading을 구현해주는 함수 템플릿인거죠. 그러니까 task화한 thread인거죠.
헷갈린 부분
첫번째는, cv는 sync(동기)로 설명하고 있고, async는 async(비동기)로 설명하고 있어서 둘이 대비되는 기능인 것 처럼 비교하고 있었습니다. 동기화의 주체, 비동기화의 주체가 달라서 비교할 대상이 아닌데 말이죠.
두번째는, thread cv도 async도 multi-thread이고 async도 thread로 구현할 수 있는데 대체 무슨 차이라는거지?였습니다. async는 비동기를 구현해주는 잘 정리된 1회성 thread 정도로 개념을 잡으니 좀 이해되는 것 같습니다.
여담
틀린 부분이 너무 많을 것 같네요. 뭐 그러면서 알아가는거죠.
댓글
댓글 쓰기