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

박제영님의 프로필 이미지
박제영

작성한 질문수

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

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

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

작성

·

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

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

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

박제영님의 프로필 이미지
박제영

작성한 질문수

질문하기