상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - C++에서 std::future와 std::promise의 차이는?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
C++에서 `std::future`와 `std::promise`는 비동기 프로그래밍을 지원하기 위해 제공되는 두 가지 중요한 클래스입니다. 이들은 서로 밀접하게 연관되어 있지만, 그 역할과 사용 방식에서 중요한 차이점이 있습니다. 아래에서 이 두 클래스의 정의, 사용 방법, 그리고 차이점에 대해 자세히 설명하겠습니다. std::promise `std::promise`는 비동기 작업의 결과를 설정하는 데 사용되는 클래스입니다. 주로 다른 스레드에서 실행되는 작업의 결과를 전달하기 위해 사용됩니다. `std::promise`는 결과를 저장하고, 이를 통해 `std::future` 객체와 연결됩니다. - 주요 기능 : - `set_value()`: 비동기 작업이 성공적으로 완료되었을 때 결과 값을 설정합니다. - `set_exception()`: 비동기 작업이 실패했을 때 예외를 설정합니다. - 사용 예 : ```cpp include <iostream> include <thread> include <future> <a href='https://sangseek.com/sangseeks/void/ko'>void</a> asyncTask(std::promise<int>& prom) { try { // 비동기 작업 수행 int result = 42; // 예시 결과 prom.set_value(result); // 결과 설정 } catch (...) { prom.set_exception(std::current_exception()); // 예외 설정 } } int main() { std::promise<int> prom; std::future<int> fut = prom.get_future(); // std::future 생성 std::thread t(asyncTask, std::ref(prom)); // 비동기 작업 스레드 시작 t.detach(); // 스레드 분리 // 결과를 기다림 try { int result = fut.get(); // 결과 가져오기 std::cout << "Result: " << result << std::endl; } catch (c<a href='https://sangseek.com/sangseeks/onst/ko'>onst</a> std::exception& e) { std::cout << "Exception: " << e.what() << std::endl; } return 0; } ``` std::future `std::future`는 비동기 작업의 결과를 가져오는 데 사용되는 클래스입니다. `std::promise`와 연결되어 있으며, 비동기 작업이 완료될 때까지 대기할 수 있는 기능을 제공합니다. - 주요 기능 : - `get()`: 비동기 작업의 결과를 가져옵니다. 작업이 완료되지 않았다면, 이 메서드는 결과가 준비될 때까지 블록됩니다. - `wait()`: 비동기 작업이 완료될 때까지 대기합니다. - `valid()`: `std::future` 객체가 유효한지 확인합니다. - 사용 예 : 위의 예제에서 `std::future`는 `std::promise`와 연결되어 비동기 작업의 결과를 가져오는 데 사용됩니다. std::promise와 std::future의 차이점 1. 역할 : - `std::promise`: 비동기 작업의 결과를 설정하는 역할을 합니다. 결과를 생산하는 쪽에서 사용됩니다. - `std::future`: 비동기 작업의 결과를 가져오는 역할을 합니다. 결과를 소비하는 쪽에서 사용됩니다. 2. 생성 및 소멸 : - `std::promise`는 결과를 설정하기 위해 생성되며, 결과가 설정되면 `std::future`와 연결됩니다. - `std::future`는 `std::promise`로부터 생성되며, 결과를 가져오기 위해 사용됩니다. 3. 예외 처리 : - `std::promise`는 비동기 작업 중 발생한 예외를 `set_exception()` 메서드를 통해 설정할 수 있습니다. - `std::future`는 `get()` 메서드를 호출할 때 예외가 발생하면 이를 다시 던져서 호출자에게 전달합니다. 4. 사용 패턴 : - `std::promise`는 일반적으로 비동기 작업을 수행하는 스레드 내에서 사용됩니다. - `std::future`는 비동기 작업의 결과를 기다리거나 가져오는 스레드에서 사용됩니다. 결론 `std::promise`와 `std::future`는 C++에서 비동기 프로그래밍을 구현하는 데 필수적인 도구입니다. `std::promise`는 결과를 설정하는 역할을 하고, `std::future`는 그 결과를 가져오는 역할을 합니다. 이 두 클래스를 적절히 활용하면, 복잡한 비동기 작업을 보다 쉽게 관리하고, 예외 처리를 포함한 안전한 코드 작성을 할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기