인프런 커뮤니티 질문&답변

박제영님의 프로필 이미지

작성한 질문수

홍정모의 따라하며 배우는 C++

19.5 작업 기반 비동기 프로그래밍

[코드] 수업내용 코드입니다.

작성

·

88

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++ 코드를 살펴보면 멀티스레딩과 관련된 세 가지 다른 접근 방식을 보여주고 있습니다.

  1. 첫 번째 코드 블록에서는 std::thread를 이용해 쓰레드를 생성하고, 람다 함수를 통해 값을 계산후, join 메소드를 사용하여 해당 쓰레드가 종료될 때까지 기다립니다.
  2. 두 번째 코드 블록에서는 std::async를 사용하여 비동기적으로 작업을 실행하고, get 메소드를 통해 실행 결과를 기다립니다.
  3. 세 번째 코드 블록에서는 std::promisestd::future를 활용하여, 쓰레드 간에 값을 전달하는 예를 보여줍니다. 여기서 promise 객체로 값을 설정하고, 이와 연결된 future 객체를 통해 해당 값을 나중에 받아올 수 있습니다.

이 코드들은 멀티스레딩을 활용한 비동기 프로그래밍에서 매우 일반적인 패턴들을 도입하고 있습니다. 각각의 경우 장단점과 사용 상황이 다르기 때문에, 실제 사용 시에는 자신의 필요와 상황에 가장 적합한 방법을 선택하여 사용하는 것이 중요합니다.