작성
·
94
1
{
int result = 0;
thread t([&] {result = 1 + 2; });
t.join(); //쓰레드가 끝날때까지 기다림
cout << result << endl;
}
{
auto fut = async([] {return 1 + 2; });
cout << fut.get() << endl; // 쓰레드에게 맡긴 작업이 끝날때까지 기다림
}
{
promise<int> prom;
auto fut = prom.get_future();
auto t = thread([](promise<int>&& prom)
{
prom.set_value(1 + 2);
}, move(prom));
cout << "before get" << endl;
cout << fut.get() << endl;
cout << "after get" << endl;
t.join();
}
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
박제영님, 공유해주신 C++ 코드를 살펴보면 멀티스레딩과 관련된 세 가지 다른 접근 방식을 보여주고 있습니다.
std::thread
를 이용해 쓰레드를 생성하고, 람다 함수를 통해 값을 계산후, join
메소드를 사용하여 해당 쓰레드가 종료될 때까지 기다립니다.std::async
를 사용하여 비동기적으로 작업을 실행하고, get
메소드를 통해 실행 결과를 기다립니다.std::promise
와 std::future
를 활용하여, 쓰레드 간에 값을 전달하는 예를 보여줍니다. 여기서 promise
객체로 값을 설정하고, 이와 연결된 future
객체를 통해 해당 값을 나중에 받아올 수 있습니다.이 코드들은 멀티스레딩을 활용한 비동기 프로그래밍에서 매우 일반적인 패턴들을 도입하고 있습니다. 각각의 경우 장단점과 사용 상황이 다르기 때문에, 실제 사용 시에는 자신의 필요와 상황에 가장 적합한 방법을 선택하여 사용하는 것이 중요합니다.