(C++ STL) thread-async (concurrency 기초2)

Posted by : at

Category : Cpp


#include <iostream>
#include <thread>
#include <future>
using namespace std;

int f1()
{
    this_thread::sleep_for(3s);
    return 10;
}

int main()
{
    // thread t(&f1);
    // t.join();

    // async로 thread를 대신해보자.
    future<int> ft = async(launch::async, &f1);
    cout << "Main routine" << endl;

    cout << ft.get() << endl;   // 스레드 종료 대기
}
  • launch policy
    • async : 비동기로 실행
    • defered : 지연된 실행
    • async | deferred : 스레드 생성이 가능하면 스레드로 그렇지 않으면 지연된 실행
#include <iostream>
#include <thread>
#include <future>
using namespace std;

int f1()
{
    cout << "f1 : " << this_thread::get_id() << endl;
    this_thread::sleep_for(3s);
    return 10;
}

int main()
{
    cout << "Main : "  << this_thread::get_id() << endl;

    // future<int> ft = async(launch::async, &f1);
    future<int> ft = async(launch::defered, &f1);
    this_thread::sleep_for(1s);
    cout << "Main routine" << endl;

    cout << ft.get() << endl;       // defered 옵션이라면, get호출 시점에서 thread 생성
}
#include <iostream>
#include <thread>
#include <future>
using namespace std;

int f1()
{
    this_thread::sleep_for(3s);
    return 10;
}

int main()
{
    // future<int> ft = async(launch::async, &f1);
    // 리턴을 받지 않는다면?
    async(launch::async, &f1);  // future가 임시 객체로 리턴
    // 이 줄이 종료되면 리턴(임시객체)는 삭제된다.
    // 따라서 스레드가 실행되며 3초간 이 줄에서 대기하게 된다.

    cout << "Main routine" << endl;

    //cout << ft.get() << endl;
}

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links