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 정도로 개념을 잡으니 좀 이해되는 것 같습니다.


여담

틀린 부분이 너무 많을 것 같네요. 뭐 그러면서 알아가는거죠.

댓글

이 블로그의 인기 게시물

WSL2 Ubuntu 20.04 및 네트워크 설정

리눅스 멀티코어를 사용하는 tar 압축/해제

git pull 을 했더니 branch가 갈라지는 경우