inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

156

콩팥팥죽

작성한 질문수 73

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();
}

 

c++

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

박제영님, 공유해주신 C++ 코드를 살펴보면 멀티스레딩과 관련된 세 가지 다른 접근 방식을 보여주고 있습니다.

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

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

교재 있나요?

1

132

2

11:11 부근에 Something::temp와 Something::getValue의 앞에 &를 붙이는 이유가 뭔가요? (함수 이름은 포인터(주소)가 아닌가요?)

1

88

3

using namespace std; 선언 후에 std::를 하는 이유가 궁금합니다

1

100

2

cstr직접구현

0

115

3

BubbleSort

1

77

2

숙제 마지막 부분

1

78

2

강의와 똑같이 진행했는데 링킹 에러가 발생합니다.

1

93

2

수업할때 레퍼런스로 사용하는 도서는 어떤 도서인가요??

1

161

2

공변반환형 관련 문의 드립니다.

1

89

2

170강 유니크 포인터에대해 질문있습니다

1

80

1

섹션 5 퀴즈의 답이 이상합니다

1

83

2

이중포인터와 배열이 이해가 안됩니다.

1

158

2

5분 17~5분 34초 객체 잘림 질문

1

77

1

Resource.h 코드 알려주세요

1

71

1

char name[] 배열의 길이와 관련해 일부 궁금점이 생겨서 질문합니다

1

94

2

화면좌측 숫자 보이기

1

114

1

화면 좌측 숫자 보이기

0

66

1

처음 c++ 수강하려는데요. 비주얼스튜디오 2022 다운로드해서 설치하면 되는건가요??

1

137

3

46강 string 버퍼 질문입니다

1

80

2

프로그래머스 수열과 구간 쿼리 2 문제 질문입니다.

1

123

2

[] 범위 검사시 assert 사용 관련 질문

1

89

2

Lecture 클래스 멤버변수 명명 관련

0

89

2

프로그래머스의 대소문자 바꿔서 출력하기 문제를 푸는데요

0

73

1

noexcept과 throw()

1

81

2