std::future<int> ft = std::async(add, 10, 20);
std::cout << "continue main" << std::endl;
int ret = ft.get();
std::cout << "result : " << ret << std::endl;

Launch Option

// 새로운 쓰레드를 할당받아서 async로 수행해 달라는 뜻. (제일 명확하게 쓰레드 생성)
std::future<int> ft = std::async(std::launch::async, add, 10, 20);

// 지연된 실행 (함수의 결과가 필요할때 실행시켜 달라는 뜻 - 값을 얻을때)
// 다른 쓰레드로 실행하는건 아님.
std::future<int> ft = std::async(std::launch::deferred, add, 10, 20);

// 환경에 따라 async를 쓸수도 있고 deferred를 쓸수도 있다. (대부분은 async를 쓰긴함)
std::future<int> ft = std::async(std::launch::async | std::launch::deferred, add, 10, 20);

// std::launch::async | std::launch::deferred 와 동일.
std::future<int> ft = std::async(add, 10, 20);

주의점